CPU macet pada 99% selama beberapa jam: mencari tahu log

8

ekstrak dari syslog:

CRON[pid]: (user) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -
execdir fuser -s {} 2>/dev/null \; -delete)

CPU saya macet 99% selama beberapa jam sekarang, dan saya berasumsi itu karena ini. Adakah yang tahu apa ini, bagaimana memulai dan bagaimana menghentikannya?

EDIT: Saya mencoba top -n1dan saya melihat ini sebagai balasannya beberapa kali:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
PID user      20   0     0    0    0 Z 99.9  0.0   0:00.00 fuser <defunct>

baris ini berulang sekitar 8 kali.

EDIT2:

uname-a:

user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux`
lsb_release -a:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:    11.10
Codename:   code

EDIT 3:

Setelah reboot, sistem kembali ke hasil yang sama 99% cpu usagedan sama top -n1.

Mendongkrak
sumber
3
Ada bug dalam perintah itu. Output stderr fuser sedang dikirim ke / dev / null, seperti yang dirancang. Tapi begitu juga output stderr dari find, yang mungkin tidak. (Karena -execdir sebenarnya tidak meluncurkan perintah melalui shell, jadi 2> / dev / null sedang diproses oleh shell yang dipanggil langsung oleh cron). Namun, sementara ini mungkin menyembunyikan gejala yang relevan, posisi 2> / dev / null bukan penyebab penggunaan CPU Anda.
James Youngman
3
Ini sangat aneh: proses zombie seharusnya tidak menggunakan waktu CPU (bahkan tidak memiliki kode untuk dijalankan). Anda memiliki bug dalam alat pelaporan proses atau di kernel Anda. OS apa ini (versi, kernel, dll.)? Apakah ada virtualisasi? Apa output dari uname -adan lsb_release -a?
Gilles 'SO- berhenti bersikap jahat'
1
The fuserperintah mungkin sangat singkat hidup. Itu menghabiskan waktu menggunakan waktu CPU (waktu sistem, bukan waktu pengguna) menghasilkan / proc data yang dikonsumsi (sepele). Setiap instance dari fusermungkin selesai dengan sangat cepat. Tapi itu mungkin sedang dijalankan berkali-kali karena ada, saya kira, banyak file sesi di sana. Angka 99,9% mungkin hanya berarti bahwa instance dari fuserCPU yang digunakan secara intensif sebelum meninggal. findmungkin tidak terlalu agresif tentang menuai anak; kemungkinan akan menelepon waitpidlagi hanya ketika meninggalkan direktori atau berjalan fuserlagi.
James Youngman
uname-a: user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux lsb_release -a: Tidak ada modul LSB yang tersedia. ID Distributor: Ubuntu Keterangan: Ubuntu 11.10 Rilis: 11.10 Codename: code
Jack
Ups, koreksi: untuk -execdir ... \;menunggu harus segera, karena kode kembali diperlukan sebagai hasil dari predikat (saya mencampur ini dengan -execdir ...+yang selalu mengembalikan benar, saya pikir).
James Youngman

Jawaban:

5

Ini adalah tugas cron yang membersihkan file sesi lama dari / var / lib / php5 /. Jika hang pada 99% Anda mungkin harus memeriksa folder tujuan (/ var / lib / php5 /) untuk jumlah file yang berlebihan atau bahkan korupsi sistem file.

Prosesnya dimulai dari crontab. Lihat daftar crontab (dijelaskan di sini ). Anda dapat mematikan proses dan menghapusnya dari crontab, tetapi kemungkinan besar Anda memiliki masalah mendasar seperti jumlah file yang berlebihan yang perlu diperbaiki.

Tommy
sumber
1
Jika Anda berakhir dengan beberapa proses pembersihan berjalan, mereka dapat saling mengganggu dengan menghasilkan kunci pada direktori ketika mereka menghapus file. Coba lepaskan sementara dari crontab hingga muatannya hilang. Kemudian tambahkan dengan interval waktu yang lebih lama antara berjalan. Anda mungkin ingin memindahkannya ke skrip dengan mekanisme penguncian untuk memastikan hanya satu instance yang berjalan. Matikan beberapa instance perintah untuk saat ini.
BillThor
2

Temukan jawabannya di sini: http://www.flynsarmy.com/2011/11/fuser-using-100-cpu-in-ubuntu-11-10/

di /etc/cron.d/php5 on Ubuntu 11.10:

Menggantikan
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2&gt;/dev/null \; -delete

Dengan
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

Mendongkrak
sumber
Ini berhasil, masalah ini tampaknya diselesaikan.
Jack