まず、CPUがオフになっているかを理解
- オンCPU:どこのスレッドが上-CPUで実行時間を費やしています。
- オフCPU:時間は待って費やされているI / O、ロック、タイマー、ページング/スワッピングなどでブロックしながら、
プロセスは、一定の期間を測定するためにブロックされている:上記の手段から、基本的にoffcputimeが何を意味するか理解しています。
古い方法、または最初から助けを借りて起動します。
用法:offcputime [-h] [PID -p | -t TID | -u | -k] [-U | -K] [-d] [ - F] [ --stack-storage- サイズSTACK_STORAGE_SIZE] [ -m MIN_BLOCK_TIME] [-M MAX_BLOCK_TIME] [ - 状態state] [期間] オフ要約 -CPUの時間をスタックトレースで 位置引数: トレースの持続期間、内秒 オプションの引数: -h、 - ヘルプ出口ショーこのメッセージとヘルプ -p PID、 - PID PID番号のみトレースのみ、このPIDは時間をブロックするためのプロセスを追跡し 、TID -t - TID TID TIDのみトレースこのトラックはちょうどスレッド#です閉塞時間 -u、--user-threads- のみ ユーザスレッドのみ(カーネルスレッド)は#だけではなく、時間を遮断するカーネルモードのスレッドよりも、ユーザーモードを追跡します -k、--kernel-threads- のみ ちょうど時間を遮断するカーネルモードのスレッドを追跡するカーネルスレッドは、のみ(ユーザー・スレッド)# -U、--user-stacks- のみ 唯一のユーザ空間からスタックを表示(ないカーネル空間の#は、ユーザーモードのコールスタックの関係を示していません スタック) -Kは、--kernel-stacks- のみ#は、カーネルモードコールスタックの関係を示し、 カーネル空間のみ(ユーザ空間からスタックを示し、 スタック) -d、カーネルBETWEEN INSERTデリミタ--delimited / へのユーザースタック#カーネルモードとユーザモードコールスタックを分離 -fを、 - フォーマットモード出力D折りたたみつ折り出力位つ折り --stack-Storage- サイズSTACK_STORAGE_SIZE提供#プロセスのスタックトレース収納スペース 保存することができるユニークなスタックトレースの数 表示され、(デフォルト1024 ) -m MIN_BLOCK_TIME、--min-ブロック- タイムMIN_BLOCK_TIME番号の印刷のみ遮断する時間である以上XXXたちを例プロセスの 量、時間 内にわたりマイクロどの我々は保存 トレース(デフォルト1 ) -M MAX_BLOCK_TIME、--max-ブロック- タイムMAX_BLOCK_TIME番号の印刷のみ遮断する時間である以上、xxxは私たちを例プロセスの 量の時間 で下マイクロたち 店舗トレース(U64_MAXデフォルト) 状態フィルタONこのスレッド--state状態ビットマスク(例えば、2例えば停電などの特定の状態の閉塞に==#トラック進捗、 TASK_UNINTERRUPTIBLE)を含む参照 /linux/sched.hを
./offcputime -K
表示カーネルモードスタックは、すべてのプロセスを呼び出します
スケジュール schedule_timeout io_schedule_timeout bit_wait_io __wait_on_bit wait_on_page_bit_killable __lock_page_or_retry filemap_fault __do_fault handle_mm_fault __do_page_fault do_page_fault page_fault chmodの 13ブロックの時間を表し13usであります スケジュール rcu_nocb_kthread kthread ret_from_fork ddebug_tables rcuos / 0 22が遮断時間22usとして表現されます
./offcputime -K -f 5
スタック表示されたコールフローを折りたたみ
bashの; entry_SYSCALL_64_fastpath; SYS_READ; vfs_read; __ vfs_read; tty_read; n_tty_read; call_rwsem_down_read_failed; rwsem_down_read_failed、スケジュール8 はい、entry_SYSCALL_64_fastpath; SYS_WRITE; vfs_write; __ vfs_write; tty_write; n_tty_write; call_rwsem_down_read_failed; rwsem_down_read_failed、スケジュール14 の実行; page_fault; do_page_fault; __ do_page_fault; handle_mm_fault。 __do_fault; filemap_fault; __ lock_page_or_retry; wait_on_page_bit_killable; __ wait_on_bit; bit_wait_io; io_schedule_timeout; schedule_timeout、スケジュール33 rcuos / 4 ; ret_from_fork; kthread; rcu_nocb_kthread、スケジュール45 のbash; entry_SYSCALL_64_fastpath; SYS_READ; vfs_read; __ vfs_read; pipe_read; pipe_wait、スケジュール88 ラン; page_fault; do_page_fault; __ do_page_fault; handle_mm_fault; __ do_fault; filemap_fault; __ lock_page_or_retry; wait_on_page_bit_killable; __ wait_on_bit; bit_wait_io; io_schedule_timeout; schedule_timeout、スケジュール108 jbd2 / xvda1- 8 ; mb_cache_list; ret_from_fork; kthread; kjournald2; jbd2_journal_commit_transaction; __ wait_on_buffer; out_of_line_wait_on_bit; __ wait_on_bit。 bit_wait_io; io_schedule_timeout; schedule_timeout、スケジュール828 jbd2 / xvda1- 8 ; mb_cache_list; ret_from_fork; kthread; kjournald2; jbd2_journal_commit_transaction; __ wait_on_buffer; out_of_line_wait_on_bit; __ wait_on_bit; bit_wait_io; io_schedule_timeout; schedule_timeout、スケジュール6201 監督; entry_SYSCALL_64_fastpath; SYS_RENAME; dput; __ dentry_kill; iput;追い出し; ext4_evict_inode; truncate_inode_pages_final; truncate_inode_pages_range; wait_on_page_bit; __ wait_on_bit; bit_wait_io; io_schedule_timeout; schedule_timeout;スケジュール41049 の実行; entry_SYSCALL_64_fastpath; sys_wait4; do_wait;スケジュール120709 bashの、entry_SYSCALL_64_fastpath; sys_wait4; do_wait。スケジュール699320たち
より多くの例
例: 。/ offcputimeの#トレースオフCPUスタック時 までのCtrl- C 。/ offcputime 5 #トレースのための 5 秒だけ 。/ offcputime -f 5 #5秒間、および出力で折りたたまれた形式 。/ offcputime -m 1000年 #というイベントのみをトレースし、最後 以上より千マイクロ秒 。/ offcputime -M 10000 #というイベントのみをトレースし、最後の 少ないより10000 マイクロ秒 。/ offcputime -p 185 #のみトレーススレッドのための PID 185 。/ offcputime -t 188 #のみトレーススレッド188 。/ offcputime - U#のみユーザスレッド(なしカーネル)をトレースします 。/ offcputime - K#のみカーネルスレッド(ユーザー)をトレースします 。/ offcputime - U#は唯一のユーザ空間スタックを示し、(なしカーネル) 。/ offcputime -K#のみカーネルスペーススタック(ユーザー)を表示