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