apt-checkの非常に多くのインスタンスの実行を防ぐ方法は?


18

非常に明白な原因でクラッシュしたUbuntu 12.04サーバーがあります。30以上のapt-checkプロセスがすべてのメモリを消費し、OOMキラーが起動し、重要なサービスを停止します。どこ私はわからないapt-checkプロセスから来たが、私は私のNagios / Icingaのプラグインが推測するcheck_aptだけでなく、それを使用することがありbyobu、その出力を表示することがステータスライン。何かがロックされ、すべてのプロセスが待機しているだけで、メモリを保持していると思います。

apt-checkシステムに非常に多くのインスタンスが存在するのを防ぐにはどうすればよいですか?私には意味がありません。dpkgデータベースの読み取りロックを取得できなくなったらすぐに終了する必要があります。

ここで問題が発生しているのは私だけではないようです。のすべての提案apt-checkはかなり否定的です:

ここに画像の説明を入力してください

(クリーンなブラウザ、ログインしていない、パーソナライズされた検索なし)

回答:


8

いくつかの詳細apt-checkについては、修正が必要な非常に鈍いスクリプトであるためのこれらの手がかりを私に与えました。それの作者に敬意を払って、私のサーバー上で失敗しています。私の考えは次のとおりです。

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • nicelevel 19自体を強制します
  • アクションにタイムアウトは設定されていません

最後の2つの組み合わせにより、渦巻き状に無限に積み上げられます。システムがより高い優先度を持つ他の目的に使用される場合、プロセスの量は増加するだけで終わりapt-checkはありません。OOMキラーが重要なシステムプロセスを強制終了すると決定すると、問題はさらに悪化します。

動作のこれら2つの側面のいずれかが異なる場合、システムがそのような壊れた状態になってしまうことは許されません。

一方で、文字列が正しい親プロセスがあまりにもこの中に責任があることについて、私はポイントを下回ると考えているの欠陥あるapt-checkと取得するにはバグが適切に対処として報告する必要があります。

  • OOMキラーが最初に自分自身を殺すことを示唆するはずです
  • nicelevelをハードコーディングしないでください
  • 情報を取得するのに不当な時間がかかる場合は終了するはずです

実際、Linux OOMのキラーはこれについていくつかの経験則を行っているようです。ナイスプロセスはスコアが高くなり、長時間実行されるプロセスは減少します。(ソース -のおかげでウルリッヒDangelのためにそれを指摘

私が提案する可能性のある解決策:

  • 処理後のキャッシュ結果
  • 単純な(偶数)呼び出しごとにすべてのPython-APTライブラリをロードせずに、N秒未満の場合は出力キャッシュ--help
  • nicelevelを構成可能にします- これを変更/無効化してください。私はそれを0に設定すると実際に役立つと信じています
  • OOMキラースコアを増加させる

ロックファイルを使用して、一度に複数のインスタンスを実行できないようにする必要があります。
デロバート

@derobertこれは、デーモンではなく、Ubuntuで特定の権限なしに、すべてのユーザーが実行できるスクリプトです。それとも私が使用することができます/var/run/ /tmp安全にこの世界-のリード/ライト可能なロックファイルのために?そこに大きな穴があります:ロックファイルを追加すると、システムアップデートの管理者に通知されません
gertvdijk

自動的に起動するもの(30以上のコピーが実行される)は、ロックを行う必要があります。または、ユーザーごとにそれを行うこともできます。いずれにせよ、それは解決する必要があるバグです。
デロバート

Nagios / Icingaは落とし穴を避けるようです。少なくとも、10秒のタイムアウトがあり、それを超えると警告が表示されます。(タイムアウトの設定方法がわかりませんが、もっと長くしたいです)。DebianのByobuは、私にとって問題の原因です。Ubuntuでは、修正されることになっています
sourcejedi

4

どのプロセスがapt-checkを生成しているかを知る必要があります。psなどを使用してプロセスツリーを取得できます。

ps -A --forest

apt-checkに親がない場合、特定のプログラムではなく、apt-checkの自己の問題である可能性があります。その場合は、apt-checkのデバッグを試みます。


ありがとう。さらに検討するためのアイデアをください。しかし、これはapt-check本当に問題だと信じるようになりました- 私自身の答えをください。
gertvdijk

メモリとCPU時間を消費している場合、ゾンビではありません。
ジル 'SO-悪であるのをやめる'

@Gillesの良い点。
文字列

0

Ubuntu 12.04で書かれたベース

私は同じ問題を抱えており、それが原因であることがわかりました。使用byobuapt-get updateずに実行した場合byobucheck-aptプロセスはありません。また、update-notifierパッケージに関連し、それらのパッケージ(update-notifer-common、update-notifier)を削除しbyobuて実行および使用するとapt-get update、別のコマンドを実行しましたが、まったく同じメモリを使用しましたapt-get -s -o Debug::NoLocking=true upgrade

他のいくつかのものが実行される可能性がありますapt-get update(ただし、おそらく実行されませんcheck-apt

  • 引数をcheck_aptpkgの更新/アップグレードに渡します 。
  • 構成されている/etc/cron.daily/apt場合、パッケージリストも更新される場合があります(https://help.ubuntu.com/lts/serverguide/automatic-updates.htmlを参照)が、1日に1回実行されるだけなので、問題はないはずです。

デスクトップでは、さらに多くのことが関係します。

結論: これらのプロセスbyobuを実行apt-get updateしてトリガーするときにイベントをキャッチしcheck-apt、ステータスバーを再構成byobuしてこれを修正します。

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