Linux 系统性能监视工具

在 Linux 服务器上,有众多命令行小工具可以用于监控服务器性能和状态。这些工具对于快速判断服务器运行情况,非常有帮助。

  • top
    top 是最常用的命令之一,用来持续显示系统资源的最新使用状况。
    [patrick@ubuntu:~]$ top
    top - 23:39:07 up  5:55,  3 users,  load average: 0.16, 0.22, 0.18
    Tasks: 141 total,   2 running, 138 sleeping,   0 stopped,   1 zombie
    Cpu(s):  3.1%us,  1.1%sy,  0.0%ni, 95.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   2041888k total,  1314284k used,   727604k free,    57688k buffers
    Swap:  1951856k total,        0k used,  1951856k free,   728052k cached
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    6043 root      20   0  855m  50m  13m R    3  2.5  12:11.37 Xorg
    2477 root      15  -5     0    0    0 S    1  0.0   0:02.28 scsi_eh_3
    7008 patrick   20   0 15648 4936 3948 S    1  0.2   0:10.46 gnome-screensav

    按 M 将会按照占用内存的大小排列进程,按 P 则会按照 CPU 占用率进行排列。
    VIRT 表示进程使用的内存总大小,包括进程实际使用的内存、映射过的文件、与其它进程共享的内存等。RES 表示实际使用中的内存大小,SHR 表示与其它进程共享的内存大小。
  • uptime
    uptime 最常用的作用是快速查看当时的系统负载情况。
    [patrick@ubuntu:~]$ uptime
    23:48:26 up  6:04,  3 users,  load average: 0.76, 0.38, 0.24

    通常来说,负载值/CPU数目 <= 1 的情况下,表示系统拥有足够的剩余处理能力,当负载值/CPU数目 > 1 的时候,就表示有进程需要等待 CPU 了。
  • vmstat
    vmstat 会提供有关内存、交换分区、进程、IO、CPU 的报告。
    [patrick@ubuntu:~]$ vmstat -S M
    procs ———–memory———- —swap– —–io—- -system– —-cpu—-
    r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
    0  0      0    697     57    712    0    0    28    17  161  552  8  2 89  1
  • iostat
    iostat 提供有关 CPU 的平均使用情况,以及 IO 信息。
    [patrick@ubuntu:~]$ iostat -x
    Linux 2.6.24-19-generic (ubuntu)     06/28/2008
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
    8.46    0.01    1.91    1.00    0.00   88.62
    Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
    sda               0.70     2.88    1.48    1.97    56.64    38.80    27.66     0.07   21.16   3.31   1.14
    sdb               0.09     0.00    0.06    0.00     6.44     0.00   113.77     0.00   17.13   5.41   0.03
  • mpstat
    mpstat 提供全局与单个 CPU 使用情况的统计报告。
    [patrick@ubuntu:~]$ mpstat -P ALL
    Linux 2.6.24-19-generic (ubuntu)     06/28/2008
    11:57:36 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
    11:57:36 PM  all    8.48    0.01    1.69    0.99    0.05    0.17    0.00   88.61    183.99
    11:57:36 PM    0    8.63    0.02    1.66    1.08    0.08    0.28    0.00   88.25    152.05
    11:57:36 PM    1    8.33    0.00    1.73    0.90    0.02    0.07    0.00   88.95     31.93
    11:57:36 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00      0.00
  • netstat
    netstat 可以用来显示活动的 TCP 连接、计算机侦听的端口、以太网统计信息、IP 路由表、IPv4 统计信息(对于 IP、ICMP、TCP 和 UDP 协议)以及 IPv6 统计信息(对于 IPv6、ICMPv6、通过 IPv6 的 TCP 以及通过 IPv6 的 UDP 协议)。
    [patrick@ubuntu:~]$ netstat -a
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp        0      0 localhost:mysql         *:*                     LISTEN
    tcp        0      0 localhost:8118          *:*                     LISTEN
    tcp        0      0 localhost:ipp           *:*                     LISTEN
    tcp        0      0 localhost:9050          *:*                     LISTEN
    tcp        0      0 192.168.1.3:59421       by2msg1204111.gate:msnp ESTABLISHED
  • ps
    ps 可以提供一个当前运行的进程的列表。
    [patrick@ubuntu:~]$ ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0   2844  1688 ?        Ss   Jun28   0:01 /sbin/init
    root         2  0.0  0.0      0     0 ?        S<   Jun28   0:00 [kthreadd]
    root         3  0.0  0.0      0     0 ?        S<   Jun28   0:00 [migration/0]
    root         4  0.0  0.0      0     0 ?        S<   Jun28   0:00 [ksoftirqd/0]
    root         5  0.0  0.0      0     0 ?        S<   Jun28   0:00 [watchdog/0]
    root         9  0.0  0.0      0     0 ?        S<   Jun28   0:00 [events/0]
  • pstree
    pstree 会显示出当前运行中的进程之间的树状结构。
    [patrick@ubuntu:~]$ pstree
    init─┬─/usr/bin/revela
    ├─NetworkManager───{NetworkManager}
    ├─NetworkManagerD
    ├─gconfd-2
    ├─gdm───gdm─┬─Xorg
    │           └─x-session-manag─┬─bluetooth-apple
    │                             ├─compiz───compiz.real───compiz-decorato───gtk-window-deco
    │                             ├─gnome-panel
    │                             ├─gnome-settings-─┬─pulseaudio─┬─gconf-helper
    │                             │                 │            └─2*[{pulseaudio}]
    │                             │                 └─{gnome-settings-}
    │                             ├─nautilus───{nautilus}
    │                             ├─nm-applet
    │                             ├─python
    │                             ├─scim
    │                             ├─seahorse-agent
    │                             ├─update-notifier
    │                             └─{x-session-manag}
  • pgrep
    pgrep 会根据提供的正则表达式查找进程。
    [patrick@ubuntu:~]$ pgrep -l ’scim’
    6966 scim
    7006 scim-launcher
    7046 scim-helper-man
    7047 scim-panel-gtk
    7049 scim-launcher
    7213 scim-bridge
  • lsof
    lsof 用于列出进程所打开的文件列表。
    [patrick@ubuntu:~]$ lsof -p 12894
    COMMAND   PID    USER   FD   TYPE     DEVICE     SIZE    NODE NAME
    firefox 12894 patrick  cwd    DIR        8,7     4096 5423105 /home/patrick
    firefox 12894 patrick  rtd    DIR        8,5     4096       2 /
    firefox 12894 patrick  txt    REG        8,5    26924  557548 /usr/lib/firefox-3.0/firefox
    firefox 12894 patrick  mem    REG        8,5    17884  900100 /lib/tls/i686/cmov/libnss_dns-2.7.so
    firefox 12894 patrick  mem    REG        8,5     7552  899934 /lib/libnss_mdns4_minimal.so.2

    因为在 Linux 中,端口也是被视作文件的,所以也可以使用 lsof -i 显示计算机上所有打开的因特网地址。
    [patrick@ubuntu:~]$ lsof -i
    COMMAND   PID    USER   FD   TYPE DEVICE SIZE NODE NAME
    pidgin  11114 patrick   14u  IPv4  58594       UDP 192.168.1.3:54865->reverse.gdsz.cncnet.net:8000
    pidgin  11114 patrick   15u  IPv4  57930       TCP 192.168.1.3:59421->by2msg1204111.phx.gbl:msnp (ESTABLISHED)

Leave a comment