GNU/Linux >> Linux の 問題 >  >> Linux

何かがすべてのメモリを消費します (一部のアプリでメモリ リークが発生していると思われます)。何をどのように検出するのですか?

解決策 1:

top を実行中 バッチモードでメモリサイズを定期的に報告することは、事態が悪化したときに誰がメモリを使用しているかを確認するために使用できます。 sar を実行しています バッチ モードでは、メモリの使用状況と関連する I/O に関する適切な診断が得られるはずです。 munin を実行中 システムを監視すると、どのメモリが使用されているかについての詳細なグラフが表示されます。これは大いに役立つかもしれません。

limits.conf を使用して、プログラムの最大コア サイズを制限できます。適切に設定すると、メモリリークしているすべてのプログラムが強制終了されます。これは、pam_limits モジュールで機能します。 ulimits で制限を設定することもできます コマンド。

大量のメモリを使用する可能性のあるいくつかのプログラムを実行しています。あなたが見ることができるいくつかのものは含まれています。

  • apache2 の下で実行されるプログラムが不十分なアプリケーション メモリリークする可能性があります。これが発生すると、メモリ サイズが増加するはずです。 MaxRequestsPerChild を設定することで、一定回数使用した後に子をリサイクルするように apache2 を調整できます。 100かそこらに。これで問題が解決した場合は、リークを解決する必要があります。これを最初に見ます。
  • MySQL がデータをメモリにロードしようとする場合があります。メモリに大量のデータがある場合、スラッシングが発生する可能性がありますが、表示されているほど劇的ではありません。
  • tmpfs が大きい場合 ファイル システムがマウントされている場合、使用時にファイルを削除しないと、メモリ リークが発生する可能性があります。保存期間の長い大きなファイルも問題になる可能性があります。
  • ほぼ同じ時刻に問題が発生する場合は、スケジュールされたプログラムでメモリ リークが発生している可能性があります。
  • 共有メモリを割り当てても、終了する前に解放しないプログラムがある場合、比較的目立たないメモリ リークが発生します。共有メモリーがメモリー内でロックされている場合、スワップが強制される場合があります。通常、使用可能な共有メモリの量は比較的限られています。
  • liquidsoap+icecast バンドルは、メモリを使用するバッファリングの問題に遭遇する可能性があります。私はこの組み合わせを使用したことがないので、これがどのように表示されるかはわかりません。

通常のメモリ使用量:空きメモリはあまり必要ありません。システムが長時間稼働していて、空きメモリがたくさんある場合は、何か問題があります。ファイルを読み書きするたびに、ブロックはバッファ キャッシュに入ります。これにより、空きメモリが減少しますが、これは良いことです。システムは、他の場所でメモリを探すことなく、いくつかのプログラムを開始するのに十分な空き領域を保持します。多くのプログラムは高速で実行されるため、実行が停止するとメモリは空きプールに戻されます。

バッファ キャッシュにあるファイルを読み取る場合、ディスク アクセスは必要なく、読み取りはバッファ キャッシュから解決されます。書き込みも同様のメカニズムを使用します。システムにメモリが必要な場合、バッファ キャッシュは最初に使用される場所の 1 つです。ほとんどのバッファはすぐに解放できます。

メモリ リークがある場合は、空きメモリとバッファの両方が縮小し始めます。リークしたメモリは最終的にスワップ領域に移動する必要があるため、これはまだ深刻な問題ではありません。システムは、スワップ領域がいっぱいになるまで問題なく動作し、残りの空き領域をプログラムが起動できなくなるまで引き下げます。通常、少量のスワップ領域が使用されることがあります。

解決策 2:

このコマンドを使用して、RAM 使用量に関する上位 10 個のアプリケーションを表示できます:

ps -A --sort -rss -o comm,pmem | head -n 11

多くのサブプロセスが生成されている場合、このコマンドが役立つことがあります:

ps auxf

このようにして、どのプロセスが一緒に属しているかを確認できます。

解決策 3:

アプリケーションに関して、そのメモリを実際に使用しているものはありません。

プログラムの使用に関して実際のメモリ使用量を把握するには、ページ キャッシュを表す「キャッシュされた」値を差し引く必要があります。

基本的に、これは適切なメモリ管理であり、理想的にはこれが必要です。

詳細については、次のリンクを参照してください:http://www.linuxatemyram.com/


Linux
  1. メモリリークを検出する方法は?

  2. sar、ps、および free を使用して Linux でメモリ使用量を計算する方法

  3. ioremap() とは

  1. Linuxでメモリ消費をログに記録する方法は?

  2. Linuxでメモリ不足の状態でアクションをトリガーする方法は?

  3. Apache と PHP でメモリ リークを調査するにはどうすればよいですか?

  1. 空きメモリの90%を埋める方法は?

  2. 慣用的なUnixプログラムは、インストールされているプレフィックスをどのように検出しますか?

  3. Linux マシンに新しいアプリケーションをデプロイするのに十分なメモリが空いているかどうかを知るにはどうすればよいですか?