6

64 ビット Linux システムでアプリケーションを開発しています。ご覧のとおり、私のアプリはダーティー ヒープ メモリを大量に消費しています。ヒープメモリについて言えば、「汚い」とはどういう意味ですか? 何がそれを引き起こし、それを防ぐために何ができるのでしょうか?

編集

アプリケーションが実行する操作を説明した方がよいでしょう。

私のアプリケーションは 2 つのスレッドで実行されます。最初のスレッドは、別のスレッドで実行されるキューにジョブを送信します。したがって、最初のスレッドはキューに入れるページを割り当て、2 番目のスレッドはそれらをデキューし、ジョブを実行して解放します。これらの操作はすべて、スレッドセーフな方法で実行されます。

そこで私はこのことについてテストを行い、100000000 個のジョブをキューに入れ、それらすべてを実行しました。特定の瞬間まで、メモリ使用量が増加します。そして、待ち行列処理が終了し、待ち行列を外す処理だけが残った場合、メモリ使用量はなぜか減少しません。最後に、すべてのジョブがキューから取り出されて実行されると、すべてのメモリが解放されます。そのため、デキュープロセスでメモリリークが発生しているようです。終了するとすべてのメモリが解放されるためですが、コードに問題はありませんでした。

ここにコードを投稿したほうがよいことはわかっていますが、大きすぎます。しかし、私が追加したことから、これを引き起こしている可能性のあるものについて推測できる人はいますか?

4

2 に答える 2

3

私はこれを見つけました

Inact_dirty: Dirty は、「ディスクまたはスワップへの書き込みが必要になる可能性がある」ことを意味します。解放するには、より多くの作業が必要です。例として、まだ書き込まれていないファイルが考えられます。I/O を抑えるために、メモリへの書き込みが早すぎることはありません。たとえば、ログを書き込んでいる場合は、完全なログの準備ができるまで待ってからディスクに送信する方がよい場合があります。

ここから取得: http://www.redhat.com/advice/tips/meminfo.html

I/O バッファのダーティ ビットによく似ていると思います。これは、(Linux 上で) 変更されているため、このバッファーをディスクに書き込む必要があることを示すビットを意味します。

ここに同様の質問があります: https://unix.stackexchange.com/questions/33381/getting-information-about-a-process-memory-usage-from-proc-pid-smaps

于 2013-05-26T19:01:07.053 に答える