Linuxサーバー保守運用時にたまに使うコマンド pstack,strace,pstree,mpstat

Published: 2016年2月11日 by tomsato

◼︎ 概要

Linuxコマンド紹介シリーズ

障害調査、負荷調査などで使うコマンドをまとめます

◼︎ pstack

わかること
そのプログラム(プロセス)がその瞬間にどんな処理を実行しているのかがわかる
あくまでもスナップショットのため何度か実行して情報を表示するべき
プログラムが何かを待っている場合、何度pstackを実行しても同じコールスタックで待っているはず
一般にpstackは負荷が低いとされているのでパフォーマンスが劣化する可能性は低いツール

// 実行例
//   apacheのプロセス番号を指定してみる
$ sudo pstack 5751
#0  0x0000003134ceae5b in accept4 () from libc.so.6 // どんなOSの関数なのかわかる
#1  0x00007f0eed38fc77 in apr_socket_accept () from libyapr.so.0
#2  0x000000000044bb0d in unixd_accept ()
#3  0x000000000044a8b3 in child_main ()
#4  0x000000000044ac14 in make_child ()
#5  0x000000000044af1e in ap_mpm_run ()
#6  0x0000000000423fe4 in main ()

accept4はソケットへの接続を受けるっぽい
 

◼︎ strace

どんなシステムコールを持っているのかOSの何の関数で時間を使っているのかがわかる
リアルタイムにモニタリングできる

//// 使い方例

// コマンドを調べる
$ strace [command]

// プロセスを調べる
$ strace -p [pid]

// 時刻を表示する
// -t は秒単位で、-tt はマイクロ秒単位で表示
$ strace -tt command

// 統計情報を表示する
$ strace -c [command or -p pid] 

◼︎ pstree

プロセスの親子関係をツリー表示する
treeコマンドみたいに表示ができ-pでプロセス番号も表示できる

// 実行例
// psコマンドで出力されるプロセスをtree形式で表示しているイメージ
$ pstree
init─┬─acpid
     ├─atd
     ├─crond
     ├─java───51*[{java}]
     ├─mcelog
     ├─6*[mingetty]
     ├─mysqld_safe───mysqld───19*[{mysqld}]
     ├─ntpd
     ...
     └─apache
実際はもっとあるけど中略

◼︎ mpstat

mpstatとはCPUの使用状況を調べることができる

インストール

$ sudo yum install sysstat

使い方

// 1秒毎に3回取得する
$ mpstat -P ALL 1 3
Linux XXX (hostname)    12/20/2015  _x86_64_    (2 CPU)

01:35:05 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:35:06 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:35:06 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    1.00    0.00   99.00
01:35:06 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:35:06 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:35:07 AM  all    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00   99.50
01:35:07 AM    0    0.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.01
01:35:07 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:35:07 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:35:08 AM  all    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
01:35:08 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:35:08 AM    1    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   99.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    0.17    0.00    0.17    0.00    0.00    0.00    0.00    0.00   99.67
Average:       0    0.33    0.00    0.00    0.00    0.00    0.00    0.33    0.00   99.33
Average:       1    0.00    0.00    0.33    0.00    0.00    0.00    0.00    0.00   99.67
 

各項目の見方

項目 説明
CPU
  • プロセッサ番号
  • ALLは全てのプロセッサの平均値
%usr
  • ユーザレベル(アプリケーション)のCPU使用率
%nice
  • nice優先順位に従ってユーザレベルで実行された処理のCPU使用率
  • 基本0%になってるけどniceコマンドを使う状況になったら変わる可能性がある
%sys
  • システムレベル(カーネル)のCPU使用率
  • ハードウェア処理時間とソフトウェア割込み時間を含んでいない
%iowait
  • ディスクI/Oによる待ち時間の割合
  • 負荷にもよるけどDBサーバだと割りと10%くらいいっている
%irq
  • ハードウェア割込みに費やしたCPUの処理時間の割合
  • 基本0%
  • Interrupt ReQuestの略
%soft
  • ソフトウェア割込みに費やしたCPUの処理時間の割合
%steal
  • ハイパーバイザによって他の仮想プロセッサに処理を割り当てられたために起こる待ち時間の割合 (多分)
%quest
  • niceゲストを実行するためにCPUが費やした時間の割合
  • 手元のサーバでは表示されない
%idle
  • アイドル状態の割合
  • (アイドル時間:次の作業指示やデータを待つための時間のこと)
  • ディスクI/Oによる待ち時間は含まれない

プロセッサの確認方法

// プロセッサは2つあることになる
// その他cpuinfoにはcpuについて情報が載っている
$ cat /proc/cpuinfo | grep processor
processor   : 0
processor   : 1

主なオプションについて

</table> ## ◼︎ 参考 * [strace コマンドの使い方をまとめてみた](http://blog.livedoor.jp/sonots/archives/18193659.html) * [【 pstree 】 プロセスの親子関係をツリー表示する](http://itpro.nikkeibp.co.jp/article/COLUMN/20071204/288730/?rt=nocnt) * [CPUをコアごとに確認する](http://qiita.com/shohhei1126/items/4b54290a3604f63f52c8) * [mpstat コマンドの読み方](https://blogs.oracle.com/yappri/entry/mpstat)
オプション 説明
-P </td> 特定のCPUの指定
はCPU番号 </td> </tr>
-P ALL 全てのCPUの指定

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧