4

プロセス内の各スレッドのメモリ使用量を測定したい。出来ますか?どのスレッドがメモリリークを起こしているかを突き止めようとしています。

編集1.リークプロセスのpmapは、[anon]による〜600の割り当てを示しています

...
63b00000    772K rw---    [ anon ]
63bc1000    252K -----    [ anon ]
63c00000    772K rw---    [ anon ]
63cc1000    252K -----    [ anon ]
63d00000    772K rw---    [ anon ]
...

次に何をすべきかアドバイス?

編集2.物理メモリの使用量が安定しているなど、仮想メモリのみがリークしています。

4

2 に答える 2

6

いいえ、メモリはスレッドではなくプロセスに接続されているため、これは不可能です。スレッドとメモリの一部との間にリンクはありません。

必要と思われるのは、割り当てポイントを指すプロファイラーです。それらの 1 つ (過去 10 年間は使用していません) はRational Purifyです。

于 2012-11-08T14:48:01.170 に答える
2

メモリの所有権はスレッド間で自由に移動できるため、通常、スレッドのメモリ使用量を特定することはできません。カーネル マッピング テーブルには、プロセス全体の使用状況、つまりすべてのスレッドに割り当てられたメモリが表示されます。

スレッドプログラミングは難しい。スレッド間でポインターとメモリを自由に共有する必要が本当にない限り (これはかなり厄介なコードの匂いです)、IPC を介して通信する一連のプロセスとしてプログラムを作り直すと、おそらくデバッグが容易になります。どの状態を共有する必要があるか。おまけに、リーキーなプロセスが比較的短期間のプロセスであることが判明した場合、メモリはexit()、リークを特定してパッチを適用することなく、システムに返されます。

于 2012-11-09T11:09:09.930 に答える