Linuxのプロセスリソース消費量(CPU、メモリ、ネットワーク帯域幅)を監視する効率的なソリューションがあるかどうかを知りたい。私はデーモンをC++で書いて、特定のPIDの監視を行いたいと思っています。私が知っていることから、古典的な解決策は定期的に/ procから情報を読むことですが、これは最も効率的な方法ではありません(多くのシステムコールを必要とします)。たとえば、50プロセスごとに毎秒のメモリ使用量を監視するには、/ procから毎秒50ファイル(150システムコールを意味する)を開いて読み書きする必要があります。これらのファイルを読むときに関係する解析はもちろんです。Linuxのプロセスごとのプログラムによるリソース監視
もう1つの問題は、ネットワーク帯域幅の消費です。これは、監視したいプロセスごとに簡単に計算できません。 NetHogsが採用したソリューションは、私の意見ではかなり高いオーバーヘッドを伴います。libpcapを使用してすべてのパケットをキャプチャして分析し、各パケットに対してローカルポートが決定され、対応するプロセスを見つけるために/ procで検索されます。
これらの方法や、この問題を処理するライブラリのより効率的な代替方法があるかどうか知っていますか?
taskstatsは、ディスクのI/Oではなく、ネットとディスク – tuxx
補正の両方が含まれていますカーネル内で簡単に変更できます)。とにかくありがとう。これはこれまでのところ最高の解決策と思われます。 – tuxx