Gentoo Hardenedは、非常に少ないプロセスで、約12時間実行中に3 GBのメモリを消費しました。

Gentoo Hardenedは、非常に少ないプロセスで、約12時間実行中に3 GBのメモリを消費しました。

私はカーネル4.3.3-hardened-r4を使ってGentoo Hardened AMD64を実行しています。私のシステムはwpa_supplicant、cron、DHCPなどのいくつかの基本デーモンだけを実行し、XセッションはWindowmaker、GKrellM、xtermのみを開いたので、時間の経過とともにLinuxは約8〜8時までますます多くのRAMを消費し始めました。 RAMとカーネルパニック誘発。これは、LinuxがバッファおよびファイルシステムキャッシュのRAM使用量を報告することとは何の関係もありません。これは、top、htop、およびGKrellMがすべてこれを考慮し、プロセスが実際にどのくらいのRAMを使用しているかを示すためです。最近まで、私はこれが私のBitcoin Coreクライアントに接続していると思いましたが、そうではありませんでした。 (私はLinuxシステムの起動時に誤ってアプリケーションを実行しました。)

emerge -NDu --with-bdeps=y @world場合によっては、アップデート全体がリリースされたときにRAMの使用量が突然正常に戻ることがわかりましたが、()この回避策を再現できませんでした。

これまで、次の修正を試しました。

  1. vm.zone_reclaim_mode=1私のカーネルでNUMAサポートをコンパイルし(Gentooのgenkernelはデフォルトでそれを有効にしません)、私のsysctlに追加します。役に立たない。
  2. 私はsysctlに追加されていvm.drop_caches=1ません。
  3. tmpfsのインストールがいっぱいであることを確認してください。私のtmpfsマウントは、1MBを超えるファイルシステム使用量をほとんど記録しません。

この動作の証拠は、次のスクリーンショットで見ることができます。

付録I:その中で実行される唯一のメモリ消費プロセスはFirefox、GKrellm、Xであり、Linuxはほぼ3GBのコアを消費しました。 メモ:ここではスワップスペースを有効にしていません(内蔵ハードドライブが古くて遅いため、USB 3.0外付けハードドライブにあります)。ただし、スワップスペースが有効になっていても、Bitcoin Coreを8時間以上オンにしてもOOMが発生します。カーネルパニック走る。

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

添付B:htopとGKrellmに欠陥がある場合は、topとして再確認しました。同じ結果。

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

添付C:私のtmpfsマウント使用統計、私の出力freeと私のコンテンツ/proc/meminfo ここで見つけることができます。

この投稿は最近の調査結果を反映するためにたくさん編集されました。古い投稿は以下にあります。このペーストビンはここにあります。

答え1

メモリサポートなどのSHMベースのインストールはありますか/tmp/var/tmpプロセスが終了した後も一時ファイルが生成される可能性があり、これらのファイルはメモリを消費します。これらのファイルは、削除されるかシステムが再起動されるまでメモリに残ります。マウント/etc/fstabmounttmpfsエントリを確認してください。

また、一時ディレクトリに大きなファイルが生成される可能性があるため、ログの回転を確認してください。 systemdを使用している場合は、ログを消去することをお勧めします。たとえば、

journalctl --vacuum-size=500M

答え2

それらを追加します。

  • ビットコインクライアントを使用した後、競合が発生するまでメモリを食べ始めます。
  • (何か奇妙なことをするまで)メモリを返しません。

最初は一般的なメモリリークのようです。 Checkerのパフォーマンスとメモリ管理を使用できますが、valgrindこれはプログラム速度を大幅に遅くします。

第2の質問は、第1の質問の子孫であってもよい。なぜこれが起こるのかわかりませんが、メモリの問題(または膨大なメモリ消費、またはプロセスがD状態に停止しているなどの他のバグ)が原因であると推測できます。他のアプリケーションでは同じ動作を示していないため、システムではなくBitcoinソフトウェアに問題があるようです。

したがって、この問題を解決するために私たちがすることはすべてハッキングになります。成功したハッキン​​グがあるかもしれませんが、それでも最善のアプローチではありません。ソースコードにアクセスでき、いくつかのプログラミング知識を知っている場合は、いくつかの静的コードアナライザを実行して、修正する必要がある「簡単な」バグがあるかどうかを確認できます。 。valgrindこのような(コード/技術)がなければ、開発者にフィードバックを提供することが最後にできることです。バグトラッカー、フォーラム、メーリングリストなどがあります。そうすれば、誰かが問題を調査し、問題を特定して解決することを願っています。

答え3

そのため、この問題でほぼ2ヶ月間混乱を経験した後、私はsysctlオプションを有効にし、他の値を使用していくつかのタスクを実行する方法を尋ねることにしました。vm.zone_reclaim_modeそして見て、問題が解決しました。

解決策:

  1. CONFIG_NUMA私のカーネル設定を有効にして再構築しました。
  2. vm.zone_reclaim_mode = 7sysctl.confに入れてください

今、私のシステムはついに24時間以上残ります。

カーネル文書にNUMAとそのような積極的な領域回収の設定が遅くなる可能性があることが示されているので、パフォーマンスの低下について少し心配していましたが、システムはついに機能します。

関連情報