<< Back to shouce.jb51.net

9.2. 系统性能管理工具

Linux是一个开放的、高可配置的操作系统,一个合格的Linux系统管理员应该可支持不同应用环境的要求。下面介绍一些管理工具,可帮助我们了解系统状态和优化系统。

  1. top

    top命令可实时地显示Linux系统的进程、CPU、内存、负载等的信息。它是我们了解系统整体状态最好的工具。

    top - 10:06:09 up 31 days,  2:14,  1 user,  load average: 0.00, 0.00, 0.00
    Tasks:  47 total,   1 running,  46 sleeping,   0 stopped,   0 zombie
     Cpu0 :  0.0% us,  0.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
     Cpu1 :  0.3% us,  0.0% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
    Mem:   1034732k total,   472336k used,   562396k free,    16460k buffers
    Swap:  1052248k total,        0k used,  1052248k free,   357940k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          
         1 root      16   0  1504  480 1352 S  0.0  0.0   0:00.59 init            
         2 root      RT   0     0    0    0 S  0.0  0.0   0:00.06 migration/0    
         3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0   
         4 root      RT   0     0    0    0 S  0.0  0.0   0:00.04 migration/1  
         5 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1 
         6 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/0        
         7 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/1       
         8 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 khelper       
         9 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 kblockd/0    
         10 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 kblockd/1   
         11 root      17   0     0    0    0 S  0.0  0.0   0:00.00 khubd      
         38 root      15   0     0    0    0 S  0.0  0.0   0:00.00 pdflush   
         37 root      15   0     0    0    0 S  0.0  0.0   0:00.00 kirqd    
         41 root       6 -10     0    0    0 S  0.0  0.0   0:00.00 aio/0   
         40 root      16   0     0    0    0 S  0.0  0.0   0:00.00 kswapd0
         42 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 aio/1 
    

    top命令的运行状态是一个实时的显示过程,我们可在这个界面监控系统运行情况。我们可通过几个按键来控制top命令,如按q可退出top命令状态,按s可输入信息的更新频率等。这些命令可按h帮助键查询。如:

    Help for Interactive Commands - procps version 3.2.1
    Window 1:Def: Cumulative mode Off.  System: Delay 3.0 secs; Secure mode Off.
    
      Z,B       Global: 'Z' change color mappings; 'B' disable/enable bold
      l,t,m     Toggle Summaries: 'l' load avg; 't' task/cpu stats; 'm' mem info
      1,I       Toggle SMP view: '1' single/separate states; 'I' Irix/Solaris mode
    
      f,o     . Fields/Columns: 'f' add or remove; 'o' change display order
      F or O  . Select sort field
      <,>     . Move sort field: '<' next col left; '>' next col right
      R       . Toggle normal/reverse sort
      c,i,S   . Toggle: 'c' cmd name/line; 'i' idle tasks; 'S' cumulative time
      x,y     . Toggle highlights: 'x' sort field; 'y' running tasks
      z,b     . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
      u       . Show specific user only
      n or #  . Set maximum tasks displayed
    
      k,r       Manipulate tasks: 'k' kill; 'r' renice
      d or s    Set update interval
      W         Write configuration file
      q         Quit
              ( commands shown with '.' require a visible task display window ) 
    Press 'h' or '?' for help with Windows,
    any other key to continue 
    
  2. ps

    ps命令可查询系统的进程状态,常用的命令参数是ps -aux,该命令可显示所有用户的进程,如果进程的命令太长,则显示的进程信息会不全。我们可用ps -auxw命令来加长显示,w参数可多加几个,最多可加三个,以显示更长的进程信息。

    debian:~# ps -aux
    USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0  1416  448 ?        S    May24   0:06 init [3] 
    root         2  0.0  0.0     0    0 ?        SW   May24   0:00 [keventd]
    root         3  0.0  0.0     0    0 ?        SW   May24   0:00 [keventd]
    root         4  0.0  0.0     0    0 ?        SW   May24   0:00 [keventd]
    root         5  0.0  0.0     0    0 ?        SW   May24   0:00 [keventd]
    root         6  0.0  0.0     0    0 ?        SWN  May24   0:11 [ksoftirqd_CPU0]
    root         7  0.0  0.0     0    0 ?        SWN  May24   0:11 [ksoftirqd_CPU1]
    root         8  0.0  0.0     0    0 ?        SWN  May24   0:10 [ksoftirqd_CPU2]
    root         9  0.0  0.0     0    0 ?        SWN  May24   0:10 [ksoftirqd_CPU3]
    root        10  0.0  0.0     0    0 ?        SW   May24  17:29 [kswapd]
    root        11  0.0  0.0     0    0 ?        SW   May24   0:00 [kreclaimd]
    root        12  0.0  0.0     0    0 ?        SW   May24  15:47 [bdflush]
    root        13  0.0  0.0     0    0 ?        SW   May24   0:00 [kupdated]
    root        14  0.0  0.0     0    0 ?        SW   May24   0:00 [mdrecoveryd]
    root        21  0.0  0.0     0    0 ?        SW   May24   0:00 [scsi_eh_2]
    root        24  0.0  0.0     0    0 ?        SW   May24   0:47 [kjournald]
    root        84  0.0  0.0     0    0 ?        SW   May24   0:00 [khubd]
    root       177  0.0  0.0     0    0 ?        SW   May24   0:59 [kjournald]
    root       178  0.0  0.0     0    0 ?        SW   May24   0:00 [kjournald]
    root       514  0.0  0.0  1476  600 ?        S    May24   0:06 syslogd -m 0
    

    ps命令的参数有以下几个:

    -a     显示所有终端下所执行的程序
    a      显示在当前终端下所执行的程序
    -A     显示所有的程序,包含所有的服务
    -f     显示UID,PPIP,C,STIME栏位
    -H     以树状格式显示,可表达进程间的相互关系
    S      列出包含已死亡的子进程信息
    u      以用户为单位列出进程信息
    v      显示进程的虚拟内存信息
    V      显示ps的版本信息
    x      显示所有进程
    
  3. kill

    kill命令可终止进程,后接进程号即可。如我们可用上面的ps命令查出你想终止的进程的进程号为299,用kill 299则可把该进程终止。

  4. free

    free可显示系统的内存使用情况。-b、-k、-m三个参数表示以bytes,kilobytes和megabytes为单位显示内存的使用情况。

    debian:~# free -m
                 total       used       free     shared    buffers     cached
    Mem:          2010       2005          5        456        146       1150
    -/+ buffers/cache:        708       1301
    Swap:         2000        127       1872
    
  5. vmstat

    使用vmstat 2 命令可每隔2秒显示一行系统信息,这些信息包括CPU占用效、内存使用情况和磁盘IO等。通过它我们可实时监控系统的资源使用情况,进行系统优化。

    debian:~# vmstat 2
       procs                      memory    swap          io     system         cpu
     r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
     0  0  0 130804   6000 149744 1179340   0   0     0     1    1     2   0   0   2
     0  0  0 130804   6000 149744 1179396   0   0    28   162  266   387   0   0 100
     0  0  0 130804   6000 149744 1179472   0   0    30   110  222   280   0   0  99
     1  0  0 130804   6000 149744 1179516   0   0    22   122  235   306   9   2  89
     0  0  0 130804   6000 149748 1179580   0   0    24   148  373   469  10   1  90
     1  0  0 130804   6000 149748 1179628   0   0    24    90  271   356  13   1  85
     1  0  0 130804   6000 149748 1179700   0   0    28   118  263   322  23   2  76
     0  0  0 130804   6000 149748 1179760   0   0    30   148  279   409  14   1  85
    
  6. sar

    sar工具可帮我们收集动态的系统信息,它的参数很丰富,功能强大。sar工具的特点是可通过计数器和计数间隔来定期、定量地输出系统状态信息。如:

    debian:~# sar -b 2 10
    
    09时47分48    tps      rtps      wtps   bread/s   bwrtn/s
    09时47分50    23.50      3.50     20.00     28.00    176.00
    09时47分52    47.50      6.50     41.00     52.00    424.00
    09时47分54    28.50      4.50     24.00     36.00    204.00
    09时47分56    52.00      9.50     42.50     76.00    352.00
    09时47分58    30.50      5.00     25.50     40.00    216.00
    09时48分00    28.50      4.50     24.00     36.00    204.00
    09时48分02    32.00      3.50     28.50     28.00    412.00
    09时48分04    46.00      5.50     40.50     44.00    388.00
    09时48分06    26.00      5.00     21.00     40.00    196.00
    
    09时48分06      tps      rtps      wtps   bread/s   bwrtn/s
    09时48分08    35.00      5.00     30.00     40.00    264.00
    Average:      34.95      5.25     29.70     42.00    283.60
    

    上面的命令表示隔2秒输出一条磁盘I/O信息,共输出10条。-b表示输出磁盘I/O信息,如果是-B则可输出paging信息,参数还很多,请用man sar查看。

  7. watch

    watch命令可重复执行某个命令,监控命令的执行状态。下面这个命令可让我们监控Z2.log文件的大小变化。

    debian:~# watch -n 3 du /home/Jims/zope/log/Z2.log
    

    -n 3表示每隔3秒执行一次du /home/Jims/zope/log/Z2.log。

  8. sysctl

    使用sysctl -a可显示所有运行中的内核参数,用sysctl -w fs.file-max=10240 命令可修改fs.file-max内核参数的值,并使参数马上生效。但重启系统后,参数设置会失效,因为命令行只能修改运行中的内核参数。如果我们要把参数设置固定下来,可把内核参数写入/etc/sysctl.conf文件。该文件的格式如下:

    # /etc/sysctl.conf - Configuration file for setting system variables
    # See sysctl.conf (5) for information.
    
    # Controls IP packet forwarding
    net.ipv4.ip_forward = 0
    
    # Controls source route verification
    net.ipv4.conf.default.rp_filter = 1
    
    # Controls the System Request debugging functionality of the kernel
    kernel.sysrq = 0
    
    # Controls whether core dumps will append the PID to the core filename.
    # Useful for debugging multi-threaded applications.
    kernel.core_uses_pid = 1
    
  9. ulimit

    使用ulimit -a可显示系统的资源限制情况。

  10. netstat

    netstat -nal可显示所有的网络连接。

  11. pppstats

    使用pppstats可得到ppp连接的状态信息。