メモリリークを検出するために長期間実行されるC ++プログラムのプロファイリングを定期的に印刷しますか?

メモリリークを検出するために長期間実行されるC ++プログラムのプロファイリングを定期的に印刷しますか?

HTTPサーバーと同様に、永久に実行するように設計されたC++コンパイル済みプログラム()があります。ELF binary使いたいウォールグリーンプログラムのメモリリークを分析します。ただし、Valgrindは通常、プログラムの終了後に出力と分析の結果を印刷します。プログラムの実行中に定期的に分析結果を印刷するようにValgrindを設定する方法はありますか?

Valgrindがこの機能をサポートしていない場合は、その機能があるかどうかを知りたいです。代替これは達成することができる。

私が作業しているプログラムは、組み込みデバイスでサービスとして実行するように設計されています。これを念頭に置いて、小さなメモリリークでも最終的にLinux OOM Killerを起動してプログラムを終了すると問題になる可能性があります。

ここでの主な目標は追跡することです。メモリリーク(またはその他のメモリ破損)これらの違反のメモリアドレスを記録します(したがって、次のコマンドを使用してこれらのメモリ違反の原因を特定できます)。分解技術)。

そこで見つけたこの回答PID、プロセス、ファイルを使用してプロセスのメモリ使用量を確認することをお勧めします/proc/PID/smaps。 diffコマンドを使用すると、特定の時間と将来の時間のメモリ消費量を比較して、違いを確認できます。この情報を使用して、GDBコアダンプを使用して分析を完了できますgcore -o processstrings

これを行うより良い方法があるかどうか疑問に思います。 (私には手動プロセスが多すぎるようです。)

Valgrindを使用してサービスを24時間実行するように制限し、Valgrindの出力に問題がないかどうかを確認することを検討しました。しかし、私のプログラムが24時間間断続的に実行できる場合、これが長年にわたって継続的に実行されるという保証はないと思います。

ベストアンサー1

おすすめ記事