9.2. 系统性能管理工具
Linux是一个开放的、高可配置的操作系统,一个合格的Linux系统管理员应该可支持不同应用环境的要求。下面介绍一些管理工具,可帮助我们了解系统状态和优化系统。
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
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 显示所有进程
kill
kill命令可终止进程,后接进程号即可。如我们可用上面的ps命令查出你想终止的进程的进程号为299,用kill 299则可把该进程终止。
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
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
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查看。
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。
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
ulimit
使用ulimit -a可显示系统的资源限制情况。
netstat
netstat -nal可显示所有的网络连接。
pppstats
使用pppstats可得到ppp连接的状态信息。