CPUが99%で数時間スタック:ログの計算


8

から抽出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は数時間99%でスタックしていますが、これはこれが原因であると考えています。これが何であるか、どのように開始され、どのように停止するかを誰かが偶然知っているでしょうか?

編集:私は試しましたがtop -n1、これを何度も見ています:

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>

この行は約8回繰り返されます。

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

編集3:

再起動後、システムは99% cpu usage同じtop -n1結果に戻りました。


3
そのコマンドにはバグがあります。フューザのstderr出力は、設計どおり/ dev / nullに送信されています。しかし、findのstderr出力もそうでしたが、おそらくそうではありませんでした。(-execdirは実際にはシェルを介してコマンドを起動しないため、2> / dev / nullはcronによって直接呼び出されたシェルによって処理されます)。ただし、これは関連する症状を隠している可能性がありますが、2> / dev / nullの配置がCPU使用率の原因ではありません。
ジェームスヤングマン

3
これは非常に奇妙です。ゾンビプロセスはCPU時間を使用すべきではありません(実行するコードすらありません)。プロセスレポートツールまたはカーネルにバグがあります。これはどのOS(バージョン、カーネルなど)ですか?仮想化はありますか?uname -aand の出力は何lsb_release -aですか?
Gilles「SO-邪悪なことをやめよう」

1
fuserコマンドは、おそらく非常に短命されます。CPU時間(ユーザー時間ではなくシステム時間)を使い切って時間を費やし、(ごくわずかに)消費する/ procデータを生成します。の各インスタンスはfuserおそらく非常に速く終了します。しかし、おそらくそこには多くのセッションファイルがあるため、何度も実行されています。99.9%という数値は、fuserCPUのインスタンスが死ぬ前に集中的に使用されていたことを意味しているにすぎません。 findおそらく子供を刈り取ることについてあまり積極的ではありません。おそらくwaitpid、ディレクトリを離れるとき、またはfuser再度実行するときにのみ、再び呼び出されます。
ジェームスヤングマン

uname-a: user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux lsb_release -a:LSBモジュールは使用できません。ディストリビューターID:Ubuntu説明:Ubuntu 11.10リリース:11.10コード名:コード
Jack

おっと、修正:-execdir ... \;述語の結果として戻りコードが必要になるため、待機は即時である必要があります(私はこれ-execdir ...+を常にtrueを返すものと混同していたと思います)。
James Youngman、2012年

回答:


5

これは、/ var / lib / php5 /から古いセッションファイルをクリーンアップするcronジョブです。99%でハングする場合は、宛先フォルダ(/ var / lib / php5 /)をチェックして、ファイルが多すぎないか、ファイルシステムが破損していないか確認してください。

プロセスはcrontabから開始されます。crontabリスト(ここで説明)を参照してください。プロセスを強制終了してcrontabから削除しますが、修正が必要なファイルが多すぎるなどの根本的な問題がある可能性が高くなります。


1
複数のクリーンアッププロセスが実行されてしまうと、ファイルを削除するときにディレクトリにロックが生成され、相互に干渉する可能性があります。負荷がなくなるまで一時的にcrontabから削除してみてください。次に、実行の間隔を長くして追加します。1つのインスタンスのみが実行されていることを確認するために、それをロックメカニズムを備えたスクリプトに移動することができます。とりあえず、コマンドの複数のインスタンスを削除してください。
BillThor

2

ここで答えが見つかりました:http : //www.flynsarmy.com/2011/11/fuser-using-100-cpu-in-ubuntu-11-10/

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

交換する
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


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


これで問題は解決し、問題は解決したようです。
Jack
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.