1

16 グラムの RAM と 2 つのクアッド コア CPU を搭載したマシンで SUSE 10 Linux を使用しています。何らかの作業を行っているプロセスが 8 つあります (CPU 集中型/ネットワーク I/O)。そのうち 4 つにメモリ リークがあります (これらはテスト条件なので、ここでリークしても問題ありません)。すべてのプロセスが占有する合計容量は約 15.4 G で、システム内の空き容量は 200 MB のみです。数時間は問題ありません。しかし、その後 malloc がハングします (メモリ リークのないプロセスの場合)。4 分以上スタックします (CPU は 100% ではありませんが、io が大幅に上昇していることに注意してください)。これで、ハングしたプロセスに問題はなくなりました (メモリが破損していません)。malloc は何をしているのですか? (デフラグまたはスワップスペースの構築を試みていますか)。

ポインタはありますか?

4

3 に答える 3

4

malloc()単純に時間がかかる場合は、フラグメント化されたフリー リストをトラバースしている可能性があり、そのエントリの多くがスワップ アウトされています。これは、CPU が少なく、IO が多く、空き RAM が限られていることと一致しています。

実装の詳細malloc()(断片化された空きリストの理解を含む) については、Wikipedia の記事が適切です: http://en.wikipedia.org/wiki/Malloc#Implementations

ああ、テスト環境であっても、メモリ リークは許容されません。ご覧のとおり、(あなたが知る限り) リークのないプログラムに干渉し、時間を浪費しています。

于 2010-06-17T15:14:57.270 に答える
1

煩わしいかもしれませんが、ブロックするプロセスで Valgrind を使用することをお勧めします。以前は検出されなかったエラーがある可能性があります。少なくとも、何が起こっているかについての考えを持っているかもしれません。ただし、数時間は数日になる可能性があります:/

于 2010-06-17T15:01:49.353 に答える
1

あなたが機械を使う前は、RAMの寿命が短かっただけです。これで、malloc がマシンの 16G 制限を超え、システムがスワッピングを開始します。しかし、PierreBdR で示唆されているようにアプリケーションをチェックすることは確かに良い考えです。

于 2010-06-17T15:17:42.110 に答える