能够监控系统的性能至关重要。如果系统资源变得过低,可能会导致很多问题。系统资源可能被单个用户占用,或者被您的系统可能托管的服务占用,例如电子邮件或网页。了解正在发生的事情可以帮助确定是否需要系统升级,或者是否需要将某些服务移动到另一台机器。
这些命令中最常用的是 top。 top 将持续更新系统资源使用情况报告。
# top 12:10:49 up 1 day, 3:47, 7 users, load average: 0.23, 0.19, 0.10 125 processes: 105 sleeping, 2 running, 18 zombie, 0 stopped CPU states: 5.1% user 1.1% system 0.0% nice 0.0% iowait 93.6% idle Mem: 512716k av, 506176k used, 6540k free, 0k shrd, 21888k buff Swap: 1044216k av, 161672k used, 882544k free 199388k cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND 2330 root 15 0 161M 70M 2132 S 4.9 14.0 1000m 0 X 2605 weeksa 15 0 8240 6340 3804 S 0.3 1.2 1:12 0 kdeinit 3413 weeksa 15 0 6668 5324 3216 R 0.3 1.0 0:20 0 kdeinit 18734 root 15 0 1192 1192 868 R 0.3 0.2 0:00 0 top 1619 root 15 0 776 608 504 S 0.1 0.1 0:53 0 dhclient 1 root 15 0 480 448 424 S 0.0 0.0 0:03 0 init 2 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 keventd 3 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kapmd 4 root 35 19 0 0 0 SWN 0.0 0.0 0:00 0 ksoftirqd_CPU0 9 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 bdflush 5 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kswapd 10 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kupdated 11 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 mdrecoveryd 15 root 15 0 0 0 0 SW 0.0 0.0 0:01 0 kjournald 81 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 khubd 1188 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kjournald 1675 root 15 0 604 572 520 S 0.0 0.1 0:00 0 syslogd 1679 root 15 0 428 376 372 S 0.0 0.0 0:00 0 klogd 1707 rpc 15 0 516 440 436 S 0.0 0.0 0:00 0 portmap 1776 root 25 0 476 428 424 S 0.0 0.0 0:00 0 apmd 1813 root 25 0 752 528 524 S 0.0 0.1 0:00 0 sshd 1828 root 25 0 704 548 544 S 0.0 0.1 0:00 0 xinetd 1847 ntp 15 0 2396 2396 2160 S 0.0 0.4 0:00 0 ntpd 1930 root 24 0 76 4 0 S 0.0 0.0 0:00 0 rpc.rquotad |
报告的顶部列出了诸如系统时间、运行时间、CPU 使用率、物理内存和交换内存使用情况以及进程数量等信息。下面是按 CPU 利用率排序的进程列表。
您可以在 top 运行时修改其输出。如果您按下i,top 将不再显示空闲进程。再次按下i以再次查看它们。按下M将按内存使用率排序,S将按进程运行时间排序,而P将再次按 CPU 使用率排序。
除了查看选项外,您还可以从 top 命令中修改进程。您可以使用u查看特定用户拥有的进程,k终止进程,以及r重新设置进程优先级。
有关进程的更深入信息,您可以查看/proc文件系统。在/proc文件系统中,您会找到一系列以数字名称命名的子目录。这些目录与当前正在运行的进程的进程 ID 相关联。在每个目录中,您都会找到一系列包含有关进程信息的文件。
您必须极其小心,不要修改这些文件,这样做可能会导致系统问题!
iostat 将显示当前的 CPU 负载平均值和磁盘 I/O 信息。这是一个很棒的命令,可以监控您的磁盘 I/O 使用情况。
# iostat Linux 2.4.20-24.9 (myhost) 12/23/2003 avg-cpu: %user %nice %sys %idle 62.09 0.32 2.97 34.62 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn dev3-0 2.22 15.20 47.16 1546846 4799520 |
# iostat -x Linux 2.4.20-24.9 (myhost) 12/23/2003 avg-cpu: %user %nice %sys %idle 62.01 0.32 2.97 34.71 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util /dev/hdc 0.00 0.00 .00 0.00 0.00 0.00 0.00 0.00 0.00 2.35 0.00 0.00 14.71 /dev/hda 1.13 4.50 .81 1.39 15.18 47.14 7.59 23.57 28.24 1.99 63.76 70.48 15.56 /dev/hda1 1.08 3.98 .73 1.27 14.49 42.05 7.25 21.02 28.22 0.44 21.82 4.97 1.00 /dev/hda2 0.00 0.51 .07 0.12 0.55 5.07 0.27 2.54 30.35 0.97 52.67 61.73 2.99 /dev/hda3 0.05 0.01 .02 0.00 0.14 0.02 0.07 0.01 8.51 0.00 12.55 2.95 0.01 |
iostat 的 man 手册包含对每一列含义的详细解释。
ps 将为您提供当前正在运行的进程列表。此命令为您提供了各种各样的选项。
一个常见的用法是列出当前正在运行的所有进程。为此,您将使用 ps -ef 命令。(此命令的屏幕输出太大而无法包含,以下仅是部分输出。)
UID PID PPID C STIME TTY TIME CMD root 1 0 0 Dec22 ? 00:00:03 init root 2 1 0 Dec22 ? 00:00:00 [keventd] root 3 1 0 Dec22 ? 00:00:00 [kapmd] root 4 1 0 Dec22 ? 00:00:00 [ksoftirqd_CPU0] root 9 1 0 Dec22 ? 00:00:00 [bdflush] root 5 1 0 Dec22 ? 00:00:00 [kswapd] root 6 1 0 Dec22 ? 00:00:00 [kscand/DMA] root 7 1 0 Dec22 ? 00:01:28 [kscand/Normal] root 8 1 0 Dec22 ? 00:00:00 [kscand/HighMem] root 10 1 0 Dec22 ? 00:00:00 [kupdated] root 11 1 0 Dec22 ? 00:00:00 [mdrecoveryd] root 15 1 0 Dec22 ? 00:00:01 [kjournald] root 81 1 0 Dec22 ? 00:00:00 [khubd] root 1188 1 0 Dec22 ? 00:00:00 [kjournald] root 1675 1 0 Dec22 ? 00:00:00 syslogd -m 0 root 1679 1 0 Dec22 ? 00:00:00 klogd -x rpc 1707 1 0 Dec22 ? 00:00:00 portmap root 1813 1 0 Dec22 ? 00:00:00 /usr/sbin/sshd ntp 1847 1 0 Dec22 ? 00:00:00 ntpd -U ntp root 1930 1 0 Dec22 ? 00:00:00 rpc.rquotad root 1934 1 0 Dec22 ? 00:00:00 [nfsd] root 1942 1 0 Dec22 ? 00:00:00 [lockd] root 1943 1 0 Dec22 ? 00:00:00 [rpciod] root 1949 1 0 Dec22 ? 00:00:00 rpc.mountd root 1961 1 0 Dec22 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf root 2057 1 0 Dec22 ? 00:00:00 /usr/bin/spamd -d -c -a root 2066 1 0 Dec22 ? 00:00:00 gpm -t ps/2 -m /dev/psaux bin 2076 1 0 Dec22 ? 00:00:00 /usr/sbin/cannaserver -syslog -u bin root 2087 1 0 Dec22 ? 00:00:00 crond daemon 2195 1 0 Dec22 ? 00:00:00 /usr/sbin/atd root 2215 1 0 Dec22 ? 00:00:11 /usr/sbin/rcd weeksa 3414 3413 0 Dec22 pts/1 00:00:00 /bin/bash weeksa 4342 3413 0 Dec22 pts/2 00:00:00 /bin/bash weeksa 19121 18668 0 12:58 pts/2 00:00:00 ps -ef |
第一列显示进程的所有者。第二列是进程 ID。第三列是父进程 ID。这是生成或启动该进程的进程。第四列是 CPU 使用率(以百分比表示)。第五列是启动时间,如果进程已运行足够长的时间,则为日期。第六列是与进程关联的 tty(如果适用)。第七列是累积 CPU 使用率(运行期间已使用的 CPU 时间总量)。第八列是命令本身。
通过此信息,您可以准确地了解系统上正在运行的内容,并终止失控进程或导致问题的进程。
vmstat 命令将提供一份报告,显示系统进程、内存、交换、I/O 和 CPU 的统计信息。这些统计信息是使用从上次运行命令到现在的数据生成的。如果从未运行过该命令,则数据将来自上次重启到现在的这段时间。
# vmstat 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 181604 17000 26296 201120 0 2 8 24 149 9 61 3 36 |
以下内容摘自 vmstat 的 man 手册。
字段描述
Procs
r: 等待运行时间的进程数。
b: 处于不可中断睡眠状态的进程数。
w: 已交换出去但仍然可运行的进程数。 此
字段是计算出来的,但 Linux 从不绝望地交换。
内存
swpd: 已使用的虚拟内存量 (kB)。
free: 空闲内存量 (kB)。
buff: 用作缓冲区的内存量 (kB)。
交换
si: 从磁盘交换进入的内存量 (kB/s)。
so: 交换到磁盘的内存量 (kB/s)。
IO
bi: 发送到块设备的块数 (blocks/s)。
bo: 从块设备接收的块数 (blocks/s)。
系统
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU
这些是 CPU 总时间的百分比。
us: 用户时间
sy: 系统时间
id: 空闲时间
lsof 命令将打印出每个正在使用的文件的列表。由于 Linux 将所有内容都视为文件,因此此列表可能非常长。但是,此命令在诊断问题时可能很有用。例如,如果您希望卸载文件系统,但被告知它正在使用中。您可以使用此命令和 grep 来查找文件系统的名称,以查看谁在使用它。
或者,假设您想查看特定进程正在使用的所有文件。为此,您将使用 lsof -p -processid-。
要了解有关可用命令行工具的更多信息,Chris Karakas 编写了一本参考指南,标题为 GNU/Linux 命令行工具摘要。它是了解有哪些工具以及如何完成许多任务的好资源。