IcmpCreateFile API を実行したプロセスで 96 バイトのメモリ リークが発生します

現象

以下の条件により、IcmpCreateFile API を実行したプロセスでメモリ リークが発生します。

- ICMP ( Internet Control Message Protocol ) API を約 10 秒以上の間隔で呼び出すような長期間稼働のプロセスを実行します。
- 別のプロセスで ICMP API を呼び出します。

以下の例のように長期間に渡って ICMP API を 10 秒以上の間隔を空けて繰り返し呼び出すプロセス A が動作しています。これとは別のプロセス B にて IcmpCreateFile API が呼び出された場合、以降、プロセス A が ICMP API を呼び出したタイミングで、プロセス B にて Private Bytes が 96 バイトずつ増加します。

プロセス A:
int main()
{
………………
While(1){
HANDLE hIcmpFile = IcmpCreateFile();
…………
IcmpSendEcho(hIcmpFile, …, …, …, …, …, …, …);
IcmpCloseHandle(hIcmpFile);
}
return 0;
}

プロセス B:
int main()
{
…………
HANDLE hIcmpFile = IcmpCreateFile();
While(1){

…………
}
return 0;
}


原因

この現象は、 ICMP API (iphlpapi.dll) の内部で、一部のオブジェクトの解放が漏れていることが原因です。

回避策

当現象によって、ICMP API が呼び出されるたびに 96 バイトのメモリが増加しますが、発生直後にシステムに深刻な影響を与えるものではありません。しかしながら、ICMP API を使用した 24 時間稼働のプロセスを長期間実行しておくことで、メモリを消費してしまいますので、一定期間ごとにプロセスを再起動するなどの対策を実施してください。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

関連情報

KB 2384321 You may see memory leak when running ICMP multithread application on post-Vista OS
http://support.microsoft.com/kb/2384321/
プロパティ

文書番号:2684917 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック