よくわからないエンジニア

よく分からないエンジニアの日々の記録

よくわからないエンジニア

Linuxのリソース関連(top)

引き続きLPIC level2の勉強中。今年の目標の週に1回はブログ更新を達成する為、コマンドの紹介でお茶を濁しつつ、資格試験の学習に役立てよう。とても生産的です。今回はtopコマンドについて学びました。

topコマンド

システム全体の負荷状況や、CPU,メモリの統計情報を確認出来ます。サーバの動きが重いときはとりあえず実行している感覚です。理解力がヤバイですね。とりあえず手頃なWebサーバで実行してみます。

top - 13:44:54 up 246 days, 22:13,  2 users,  load average: 0.52, 0.59, 0.66
Tasks: 140 total,   1 running, 139 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.2%us,  0.8%sy,  0.0%ni, 96.7%id,  0.2%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   1922092k total,  1799136k used,   122956k free,    29932k buffers
Swap:  1048572k total,    55292k used,   993280k free,  1512868k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
26532 httpd     20   0  186m  11m 4208 S  1.7  0.6   0:00.06 httpd
26529 httpd     20   0  184m 9.9m 3084 S  1.3  0.5   0:00.05 httpd
26072 httpd     20   0  187m  11m 4236 S  1.0  0.6   0:00.80 httpd
26513 httpd     20   0  188m  12m 4176 S  0.7  0.7   0:00.25 httpd
   10 root      RT   0     0    0    0 S  0.3  0.0   0:15.47 watchdog/1
26080 httpd     20   0  188m  13m 4284 S  0.3  0.7   0:00.58 httpd
    1 root      20   0 19356  876  676 S  0.0  0.0   0:08.33 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:54.06 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:13.74 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:20.42 watchdog/0
    7 root      RT   0     0    0    0 S  0.0  0.0   0:40.90 migration/1
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/1
    9 root      20   0     0    0    0 S  0.0  0.0   0:19.98 ksoftirqd/1
   11 root      20   0     0    0    0 S  0.0  0.0  12:07.93 events/0
   12 root      20   0     0    0    0 S  0.0  0.0  14:34.04 events/1
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/0
   14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/1
   15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/0
   16 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/1
   17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef
   18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef
   19 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup
   20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper
   21 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns
   22 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr
   23 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm
   24 root      20   0     0    0    0 S  0.0  0.0   0:50.33 sync_supers
<以下省略>

こんな感じで表示された後、放っておくとずっと更新されています。Webサーバなのでhttpdプロセスがリソースを少し使っていますね。

オプション

更新頻度の変更(-d*)

1秒ごとに変更したい場合"top -d1"、又はtop実行中にdを押してから1をEnterで反映されます。

コマンドをフルパス表示(-c)

"-c"又はtop実行中にcを押下すると、commandがフルパスで表示されます。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0 19356  876  676 S  0.0  0.0   0:08.33 /sbin/init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 [kthreadd]
    3 root      RT   0     0    0    0 S  0.0  0.0   0:54.09 [migration/0]
    4 root      20   0     0    0    0 S  0.0  0.0   0:13.75 [ksoftirqd/0]
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 [stopper/0]
    6 root      RT   0     0    0    0 S  0.0  0.0   0:20.43 [watchdog/0]

表示項目の変更

top実行中にfで表示する項目を変更出来ます。アスタリスクが付いている項目が現在選択されている項目です。

Current Fields:  AEHIOQTWKNMbcdfgjplrsuvyzX  for window 1:Def
Toggle fields via field letter, type any other key to return

* A: PID        = Process Id
* E: USER       = User Name
* H: PR         = Priority
* I: NI         = Nice value
* O: VIRT       = Virtual Image (kb)
* Q: RES        = Resident size (kb)
* T: SHR        = Shared Mem size (kb)
* W: S          = Process Status
* K: %CPU       = CPU usage
* N: %MEM       = Memory usage (RES)
* M: TIME+      = CPU Time, hundredths
  b: PPID       = Parent Process Pid
  c: RUSER      = Real user name
  d: UID        = User Id
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty
  j: P          = Last used cpu (SMP)
  p: SWAP       = Swapped size (kb)
  l: TIME       = CPU Time
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags <sched.h>
* X: COMMAND    = Command name/line

Flags field:
  0x00000001  PF_ALIGNWARN
  0x00000002  PF_STARTING
  0x00000004  PF_EXITING
  0x00000040  PF_FORKNOEXEC
  0x00000100  PF_SUPERPRIV
  0x00000200  PF_DUMPCORE
  0x00000400  PF_SIGNALED
  0x00000800  PF_MEMALLOC
  0x00002000  PF_FREE_PAGES (2.5)
  0x00008000  debug flag (2.5)
  0x00024000  special threads (2.5)
  0x001D0000  special states (2.5)
  0x00100000  PF_USEDFPU (thru 2.4)

表示させたい項目がある場合、該当するアルファベットを押下してからEnterを押します。

項目のソート

top実行中にshift+fで以下のソート項目の選択画面に移動します。

Current Sort Field:  K  for window 1:Def
Select sort field via field letter, type any other key to return

  a: PID        = Process Id
  b: PPID       = Parent Process Pid
  c: RUSER      = Real user name
  d: UID        = User Id
  e: USER       = User Name
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty
  h: PR         = Priority
  i: NI         = Nice value
  j: P          = Last used cpu (SMP)
* K: %CPU       = CPU usage
  l: TIME       = CPU Time
  m: TIME+      = CPU Time, hundredths
  n: %MEM       = Memory usage (RES)
  o: VIRT       = Virtual Image (kb)
  p: SWAP       = Swapped size (kb)
  q: RES        = Resident size (kb)
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  t: SHR        = Shared Mem size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  w: S          = Process Status
  x: COMMAND    = Command name/line
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags <sched.h>

Note1:
  If a selected sort field can't be
  shown due to screen width or your
  field order, the '<' and '>' keys
  will be unavailable until a field
  within viewable range is chosen.

Note2:
  Field sorting uses internal values,
  not those in column display.  Thus,
  the TTY & WCHAN fields will violate
  strict ASCII collating sequence.
  (shame on you if WCHAN is chosen)

shift + F を実施しなくても、CPU/Memory/Timeであれば実行中画面から以下で反映されます。
CPU: shift + p
MEM: shift + m
TIME: shirt + t

上記3つだけでも大分便利に使えます。

指定したプロセス(-p PID)やユーザー(-u uname)を表示する

こちらも便利。特定のプロセスやユーザーの監視が出来ます。

[user]

#top -u httpd
top - 16:42:41 up 37 days,  5:14,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1921992k total,  1789724k used,   132268k free,   199772k buffers
Swap:  1048572k total,     4632k used,  1043940k free,  1344120k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30752 httpd     20   0  516m 9424 1160 S  0.0  0.5   0:24.72 httpd
30753 httpd     20   0  516m 9428 1160 S  0.0  0.5   0:24.67 httpd
30758 httpd     20   0  516m 9428 1160 S  0.0  0.5   0:24.69 httpd

[PID]

#top -p 30752
top - 16:41:40 up 37 days,  5:13,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1921992k total,  1789864k used,   132128k free,   199772k buffers
Swap:  1048572k total,     4632k used,  1043940k free,  1344120k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30752 httpd     20   0  516m 9424 1160 S  0.0  0.5   0:24.71 httpd

batchで実行(-b)

これは参考書見た時は全く分からなかったんですが、実行結果が出力されるようになるので、このままファイルに出力出来ます。

#top -d5 -n3 -b > test.log

とりあえず勉強目的ではじめましたが、topだけでも知らないこといっぱいありました。。
果たしてこんなペースで合格出来るのだろうか、迸るほど不安です。