web-dev-qa-db-ja.com

目に見えるプロセスに接続されていない厄介なCPUスパイク

ここで本当に奇妙な問題。 CPUが約5分間、すべてのコアで80〜90%ビジー状態になる、非常に不快なCPUスパイクが断続的に発生し続けます。 contopをhtopまたはシステムモニターで表示し、%CPUで並べ替えると、このようなCPU使用率を説明するプロセスが表示されません。

これが始まって以来、私が変更した唯一のものは:

  • カーネルバージョン2.6.35に移動しました(ホームコンパイル、2.6.24-1から)
  • Nvidiaドライバー256.44をインストールしました(256.34から)

今、私は問題を見つけるためにそれらの両方をダウングレードしますが、科学的に可能な限りこれを行い、ダウングレードする前にCPU爆発の原因を見つけたいと思います。

編集:私の正確な問題は、最新のドライバーのnvidia回帰のように見えます。 他の人々も同様の急上昇を経験しています

7
Oli

これはカーネルスレッドである可能性があり、ほとんどのパフォーマンスモニターではデフォルトで非表示になっています。 htopでは、「K」(shift + k)でカーネルスレッドを非表示/表示できます。

1
JanC

「すべてのコアで約5分間、CPUが80〜90%ビジーになります」

そのように使用すると、sysstatパッケージで利用可能なpidstatを使用して原因を特定できる可能性があります。

単にpidstat -u | sort -nr -k 7,7 | head -10そして、最もCPUを使用したプロセスが一番上の行になります。

3
Li Lo

私はいくつかのシェルスクリプトで問題の原因を見つけようとします:

#!/bin/sh
MAXLOAD=100
CURRLOAD=`uptime | sed 's@.*load average: \([^,]*\).*@\1@' | sed 's@0\?.0\?@@'`

if [ $CURRLOAD -gt $MAXLOAD ]; then                                             
  ps -eo tid,pcpu,comm | sort -n -k 2 | tail -n 5 | \
    mail -s "High load" -e [email protected]
fi

スクリプトには、2つの変数MAXLOADCURRLOADがあります。最初の負荷は100倍の高負荷である必要があります。したがって、スパイクが発生し、システム負荷が2または3になる場合、MAXLOADを200前後の値に設定する必要があります。$CURRLOADuptimeの出力を受け取り、負荷を探し、ドットと先行ゼロを削除します。

ある時点で負荷が高い場合、CPU使用率が最も高い5つのプロセスを出力し、[email protected]に送信します。

このスクリプトは、スパイクの理由を見つけるのに役立ち、それがわかっている場合は、問題を解決できる可能性があります。

2
qbi

この問題を修正する可能性のある最近修正されたバグがいくつかあります。 Ubuntuを実行している場合は、Ubuntuカーネルを使用して、定期的な更新を通じてパッチを取得することをお勧めします。サポートと安定性のためにLucidをインストールすることをお勧めします。必要なLucidにない機能を認識している場合は、Maverickを使用できます。

1
Brad Figg

保存できるトップから出力を取得するには:top -b -n1

これをcronjobに貼り付けると、問題が解消された後でも詳細なプロセスリストを確認できます。 crontabエントリの例:

* * * * * top -b -n1 > /tmp/top_output_$(date +%Y-%m-%d_%H:%M:%S)

これにより、/ tmpに1分ごとに1つのファイルが保存されます

1

これはカーネルの問題だと思います。私は公式にテストされたバージョンに戻ります。