6

Linux プロセスによって読み書きされた合計バイト数を出力したいと考えています。たとえば、私は実行します

gcc -c a.c

そして、その子を含む GCC が Linux カーネルから要求した合計バイト数と、それらがカーネルに送信したバイト数を確認したいと考えています。

この問題に対する不完全な解決策は次のとおりです。

  • フィールドrcharwcharin/proc/PID/ioは、これまでに読み書きされたバイト数を示します。子プロセスは考慮されません。プロセスが終了するとすぐに失われます。

  • などのツールをstrace使用して、プロセスとその子プロセスの syscall ( readwritesyscalls など) を出力できますが、読み取り/書き込みのバイト数を集計することはできません。

Linuxプロセスとその子プロセスによって読み書きされた合計バイト数を出力するには?

4

2 に答える 2

10

少しぎこちなく、strace が必要です。

strace -e trace=read,write -o ls.log ls

読み取りおよび書き込みシステムコールのログを提供します。これで、このログを取得して、このように最後の列を合計できます

cat ls.log | grep read | awk 'BEGIN {FS="="}{ sum += $2} END {print sum}'

行頭の読み取りのみに一致するように grep を変更したくない場合があります。

于 2012-01-13T15:52:56.190 に答える
2

iotopを見ることができます。これは、各プロセスのディスク消費量(リアルタイムおよび書き込みと読み取りの合計)を表示できるトップのようなツールです。

編集:

Linuxボックスを監視するために非常に強力に見えるsysstatを確認することもできます。ドキュメントによると:

膨大な数の異なるメトリックを監視できます。

  1. 入出力および転送速度の統計(グローバル、デバイスごと、パーティションごと、ネットワークファイルシステムごと、およびLinuxタスク/ PIDごと)。
  2. 仮想化アーキテクチャのサポートを含む、CPU統計(グローバル、CPUごと、およびLinuxタスク/ PIDごと)。
  3. メモリ、hugepages、およびスワップスペース使用率の統計。
  4. 仮想メモリ、ページング、および障害の統計。
  5. タスクごと(PIDごと)のメモリとページフォールトの統計。
  6. タスクとそのすべての子のグローバルCPUおよびページフォールト統計。
  7. プロセス作成アクティビティ。
  8. 割り込み統計(グローバル、CPUごと、および割り込みごと、潜在的なAPIC割り込みソース、ハードウェアおよびソフトウェア割り込みを含む)。
  9. 広範なネットワーク統計:ネットワークデバイスからの障害を含む、ネットワークインターフェイスアクティビティ(1秒あたりに送受信されたパケット数とkBなど)。SNMPv2標準に基づくIP、TCP、ICMP、およびUDPプロトコルのネットワークトラフィック統計。IPv6関連のプロトコルのサポート。
  10. NFSサーバーとクライアントのアクティビティ。
  11. ソケット統計。
  12. キューとシステム負荷の統計を実行します。
  13. カーネル内部テーブルの使用率統計。
  14. システムおよびLinuxごとのタスク切り替えアクティビティ。
  15. 統計の交換。
  16. TTYデバイスのアクティビティ。
  17. 電力管理統計(瞬時および平均CPUクロック周波数、ファン速度、デバイス温度、電圧入力、システムに接続されているUSBデバイス)。

そして、ここにsar(sysstatパッケージのメインコマンド)の使用例がいくつかあります。

于 2012-01-13T14:54:33.110 に答える