ps命令
命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid
结果展示:
这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息。 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列。
比如这里找到了一个TID : 30834 ,所占用的TIME时间最高。
通过 printf "%x\n" 30834 首先转化成16进制, 继续通过jstack命令dump出当前的jvm进程的堆栈信息。 通过Grep命令即可以查到对应16进制的线程id信息,很快就可以找到对应最耗CPU的代码快在哪。
简单的解释下,jstack下这一串线程信息内容:
Java代码
- "DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]
nid : 对应的linux操作系统下的tid,就是前面转化的16进制数字
tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上,我自己还没到那种程度,所以先放下
top命令
命令:top -Hp pid
结果显示:
和前面的效果一下,你可以实时的跟踪并获取指定进程中最耗cpu的线程。 再用前面的方法提取到对应的线程堆栈信息。
判断I/O瓶颈
mpstat命令
命令:mpstat -P ALL 1 1000
结果显示:
注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。
通过这个参数可以比较直观的看出当前的I/O操作是否存在瓶颈
iostat命令
命令: iostat -m -x 1 1000
同样你可以观察对应的CPU中的%iowait数据,除此之外iostat还提供了一些更详细的I/O状态数据,比如比较重要的有:
avgqu-sz : The average queue length of the requests that were issued to the device. (磁盘队列的请求长度,正常的话2,3比较好。可以和cpu的load一样的理解)
await : The average time (in milliseconds) for I/O requests issued to the device to be served. (代表一个I/O操作从wait到完成的总时间)
svctm和%util都是代表处理该I/O请求花费的时间和CPU的时间比例。 判断是否瓶颈时,这两个参数不是主要的
r/s w/s 和 rMB/s wMB/s 都是代表当前系统处理的I/O的一些状态,前者是我们常说的tps,后者就是吞吐量。这也是评价一个系统的性能指标
pid命令
命令: pidstat -p pid -u -d -t -w -h 1 1000
结果显示:
相当实用的一个命令,可以基于当个进程分析对应的性能数据,包括CPU,I/O,IR , CS等,可以方便开发者更加精细化的观察系统的运行状态。不过pidstat貌似是在2.6内核的一些较新的版本才有,需要安装sysstat包。
ubuntu下,可以通过sudo apt-get install sysstat进行安装。
sar命令
命令:sar -x pid 1 1000
sar也可以指定对应的pid,关注固定的几个参数,没有pidstat那么强大。 看不到对应的I/O, IR等信息。
sar的功能可以覆盖mpstat , iostat的相关功能。
dstat命令
命令:dstat -y --tcp 1 1000
通过dstat --tcp可以比较方便的看到当前的tcp的各种状态,不需要每次netstat -nat去看
其他命令
netstat -natp : 查看对应的网络链接,关注下Recv-Q , Send-Q , State。
lsof -p pid : 查找对应pid的文件句柄
lsof -i : 80 : 查找对应端口被哪个进程占用
lsof /tmp/1.txt :查找对应文件被哪个进程占用
tcpdump / wireshark :抓包分析工具
jstat / jmap / jstack / jps 等一系列的java监控命令
iostat
iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。
meminfo 和 free
Meminfo 可让你获取内存的详细信息,你可以使用 cat 和 grep 命令来显示 meminfo 信息:
1 |
cat/proc/meminfo |
另外你可以使用 free 命令来显示动态的内存使用信息,free 只是给你大概的内存信息,而 meminfo 提供的信息更加详细。例如在 oschina 上的 free 命令执行结果:
mpstat
mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
再来看看 oschina 上的 mpstat 命令执行结果:
关于 mpstat 执行结果中的参数意思请参考此贴。
netstat
Netstat 和 ps 命令类似,是 Linux 管理员基本上每天都会用的工具,它显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等,下面是一些常用的参数:
1 2 3 4 |
-a Show all socket information -r Show routing information -i Show network interface statistics -s Show network protocol statistics |
nmon
Nmon, 是 Nigel‘s Monitor 的缩写,是一个使用很普遍的开源工具,用以监控 Linux 系统的性能。Nmon 监控多个子系统的性能数据,例如处理器的使用率、内存使用率、队列、磁盘I/O统计、网络I/O统计、内存页处理和进程信息。Nmon 也提供了一个图形化的工具:
要运行 nmon,你可以在命令行中启动它,然后选择要监控的子系统,这些子系统都对应有一个快捷键,例如输入 c 可查看 CPU 信息,m用于查看内存,d用来查看磁盘信息等,你也可以使用 -f 命令将 nmon 的执行结果保存到一个 CSV 文件中,便于日后分析。
在每日的监控工作中,我发现 nmon 是我最常用的工具。
pmap
pmap 命令用来报告每个进程占用内存的详细情况,可用来看是否有进程超支了,该命令需要进程 id 作为参数。
ps 和 pstree
ps 和 pstree 命令是 Linux 系统管理员最好的朋友,都可以用来列表正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。
sar
sar 程序是系统监控工具里的瑞士军刀。该程序包含三个工具:sar 用来显示数据,sa1 和 sa2 用来收集数据并保存。sar 可用来显示 CPU 使用率、内存页数据、网络 I/O 和传输统计、进程创建活动和磁盘设备的活动详情。sar 和 nmon 最大的不同就是 sar 跟适合用作长期的监控,而 nmon 可以让你快速的了解系统当前状态。
strace
strace 经常被认为是程序员调试的工具,但不止如此。它可以记录进程进行系统调用的详情,因此它也是一个非常好的诊断工具,例如你可以使用它来找出某个程序正在打开某个配置文件。
Strace 也有一个缺陷,但它在跟踪某个进程时会让该进程的性能变得非常差,因此请谨慎使用。
tcpdump
Tcpdump 是一个简单、可靠的网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络。当然,如果你要获取跟详细的信息,你应该使用 Wireshark (下面我们会介绍).
top
top 命令显示当前的活动进程,默认它是按消耗 CPU 的厉害程度进行排序,每5秒钟刷新一次列表,你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。
uptime
uptime 命令告诉你这台服务器从开机启动到现在已经运行了多长时间了。同时也包含了从启动到现在服务器的平均负载情况,看看 oschina 的数据:
我已经忘了上次是为什么重启机器了,好像是换了个机柜。
vmstat
你可以使用 vmstat 来监控虚拟内存,一般 Linux 上的开发者喜欢使用虚拟内存来获得最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。
在 oschina 上执行 vmstat 的结果:
Wireshark
Wireshark, 前身是 Ethereal ,是一个网络协议检测程序,让您经由程序抓取运行的网站的相关资讯,包括每一封包流向及其内容、资讯可依操作系统语系看出,方便查看、监控TCP session动态等等.
这里罗列的是大多数最有价值的 Linux 监控程序
1、lsof 简介
lsof 是 linux 下的一个非常实用的系统级的监控、诊断工具。
它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~
它可以用来列出被各种进程打开的文件信息,记住:linux 下 “一切皆文件”,
包括但不限于 pipes, sockets, directories, devices, 等等。
因此,使用 lsof,你可以获取任何被打开文件的各种信息。
只需输入 lsof 就可以生成大量的信息,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
lsof 的示例输出:
1 2 3 4 5 6 7 |
[email protected]:~/lab0# lsof COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 8,6 4096 2 / systemd 1 root rtd DIR 8,6 4096 2 / systemd 1 root txt REG 8,6 2273340 1834909/usr/lib/systemd/systemd systemd 1 root mem REG 8,6 210473 1700647/lib/libnss_files-2.15.s ... |
2、lsof 常用用法
2.1 监控打开的文件、设备
查看文件、设备被哪些进程占用
1 2 3 4 5 6 7 8 9 |
# lsof /dev/tty1 COMMAND PID USER FD TYPE DEVICE SIZE/OFFNODE NAME bash 1770 jian 0u CHR 4,1 0t0 1045/dev/tty1 bash 1770 jian 1u CHR 4,1 0t0 1045/dev/tty1 bash 1770 jian 2u CHR 4,1 0t0 1045/dev/tty1 bash 1770 jian 255u CHR 4,1 0t0 1045/dev/tty1 startx 1845 jian 0u CHR 4,1 0t0 1045/dev/tty1 startx 1845 jian 1u CHR 4,1 0t0 1045/dev/tty1 ... |
2.2 监控文件系统
指定目录、挂载点,可以看到有哪些进程打开了其下的文件:
1 2 3 4 |
# lsof /data/ COMMAND PID USER FD TYPE DEVICE SIZE/OFFNODE NAME bash 15983 jian cwd DIR 8,5 4096 8252/data/backup ... |
这在 umount 某个文件系统失败时非常有用(通常会报该 FS is busy)。
列出某个目录(挂载点 如 /home 也行)下被打开的文件:
1 2 3 4 5 6 |
# lsof +D /var/log/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 488 syslog 1w REG 8,1 1151 268940/var/log/syslog rsyslogd 488 syslog 2w REG 8,1 2405 269616/var/log/auth.log console-k 144 root 9w REG 8,1 10871 269369/var/log/ConsoleKit/history |
列出被指定进程名打开的文件:
1 2 3 4 5 6 7 8 9 10 |
# lsof -c ssh -c init COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root txt REG 8,1 124704 917562/sbin/init init 1 root mem REG 8,1 1434180 1442625/lib/i386-linux-gnu/libc-2.13.so init 1 root mem REG 8,1 30684 1442694/lib/i386-linux-gnu/librt-2.13.so ... ssh-agent 1528 lakshmanan 1u CHR 1,3 0t0 4369/dev/null ssh-agent 1528 lakshmanan 2u CHR 1,3 0t0 4369/dev/null ssh-agent 1528 lakshmanan 3u unix 0xdf70e240 0t0 10464/tmp/ssh-sUymKXxw1495/agent.1495 |
2.3 监控进程
指定进程号,可以查看该进程打开的文件:
1 2 3 4 5 6 7 8 9 10 |
# lsof -p 2064 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME firefox 2064 jian cwd DIR 8,6 4096 1571780/home/jian firefox 2064 jian rtd DIR 8,6 4096 2 / firefox 2064 jian txt REG 8,6 44224 1985670/usr/lib/firefox-12.0/firefox firefox 2064 jian mem REG 8,6 14707012 925361/usr/share/fonts/chinese/msyhbd.ttf firefox 2064 jian mem REG 8,6 15067744 925362/usr/share/fonts/chinese/msyh.ttf firefox 2064 jian mem REG 8,6 16791251 1701681/usr/share/fonts/wenquanyi/wqy-zenhei.ttc firefox 2064 jian mem REG 0,16 67108904 10203/dev/shm/pulse-shm-3021850167 ... |
当你想要杀掉某个用户所有打开的文件、设备,你可以这样:
1 |
kill-9 `lsof-t -u lakshmanan` |
此处 -t 的作用是单独的列出 进程 id 这一列。
关于杀死进程的 4 种方式,请参考:
http://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
2.4 监控网络
查看指定端口有哪些进程在使用(lsof -i 列出所有的打开的网络连接):
1 2 3 4 5 |
# lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFFNODE NAME sshd 1569 root 3u IPv4 10303 0t0 TCP *:ssh(LISTEN) sshd 1569 root 4u IPv6 10305 0t0 TCP *:ssh(LISTEN) ... |
列出被某个进程打开所有的网络文件:
1 |
lsof-i -a -p 234 |
或者
1 |
lsof-i -a -cssh |
列出所有 tcp、udp 连接:
1 2 |
lsof-i tcp; lsof-i udp; |
列出所有 NFS 文件:
1 |
lsof-N -u lakshmanan -a |
查看指定网口有哪些进程在使用:
1 2 3 4 5 6 |
# lsof [email protected] COMMAND PID USER FD TYPE DEVICE SIZE/OFFNODE NAME skype 1909 jian 54u IPv4 9116 0t0 TCP 192.168.1.91:40640->64.4.23.153:40047 (ESTABLISHED) pidgin 1973 jian 7u IPv4 6599 0t0 TCP 192.168.1.91:59311->hx-in-f125.1e100.net:https (ESTABLISHED) pidgin 1973 jian 13u IPv4 9260 0t0 TCP 192.168.1.91:54447->by2msg3010511.phx.gbl:msnp (ESTABLISHED) ... |
3、更多使用技巧
3.1 监控用戶
查看指定用戶打开的文件(lsof -u ^lakshmanan 可以排除某用户):
1 2 3 4 5 6 7 8 9 |
# lsof -u messagebus COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dbus-daem 1805 messagebus cwd DIR 8,6 4096 2 / dbus-daem 1805 messagebus rtd DIR 8,6 4096 2 / dbus-daem 1805 messagebus txt REG 8,6 1235361 1834948/usr/bin/dbus-daemon dbus-daem 1805 messagebus mem REG 8,6 210473 1700647/lib/libnss_files-2.15.so dbus-daem 1805 messagebus mem REG 8,6 190145 1700642/lib/libnss_nis-2.15.so dbus-daem 1805 messagebus mem REG 8,6 490366 1700636/lib/libnsl-2.15.so ... |
3.2 监控应用程序
查看指定程序打开的文件:
1 2 3 4 5 6 7 8 9 |
# lsof -c firefox COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME firefox 2064 jian cwd DIR 8,6 4096 1571780/home/jian firefox 2064 jian rtd DIR 8,6 4096 2 / firefox 2064 jian txt REG 8,6 44224 1985670/usr/lib/firefox-12.0/firefox firefox 2064 jian mem REG 8,6 14707012 925361/usr/share/fonts/chinese/msyhbd.ttf firefox 2064 jian mem REG 8,6 15067744 925362/usr/share/fonts/chinese/msyh.ttf firefox 2064 jian mem REG 8,6 16791251 1701681/usr/share/fonts/wenquanyi/wqy-zenhei.ttc ... |
4、命令模式技巧
4.1 组合逻辑查询条件
只有多个查询条件都满足, 用 "-a" 参数,默认是 -o 。
1 2 3 4 5 6 7 |
# lsof -a -c bash -u root COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1986 root cwd DIR 8,6 4096 1701593/root/lab bash 1986 root rtd DIR 8,6 4096 2 / bash 1986 root txt REG 8,6 1994157 1700632/bin/bash bash 1986 root mem REG 8,6 9690800 405214/usr/lib/locale/locale-archive bash 1986 root mem REG 8,6 210473 1700647/lib/libnss_files-2.15.so |
4.2 lsof 命令的重复执行模式:
基于给定的参数延时多少秒重复执行 lsof
+r 表示 当没有文件被打开的时候,repeat mode 将自行结束。
-r 表示 不管文件是否存在或者被打开,它都将执行,直到你中断它。
每个循环的输出使用 ‘=======’ 做分隔符,你也可以用 ‘-r’ | ‘+r’ 指定延时时间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# lsof -u lakshmanan -c init -a -r5 ======= ======= COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME inita.sh 2971 lakshmanan cwd DIR 8,1 4096 393218/home/lakshmanan inita.sh 2971 lakshmanan rtd DIR 8,1 4096 2 / inita.sh 2971 lakshmanan txt REG 8,1 83848 524315/bin/dash inita.sh 2971 lakshmanan mem REG 8,1 1434180 1442625/lib/i386-linux-gnu/libc-2.13.so inita.sh 2971 lakshmanan mem REG 8,1 117960 1442612/lib/i386-linux-gnu/ld-2.13.so inita.sh 2971 lakshmanan 0u CHR 136,4 0t0 7/dev/pts/4 inita.sh 2971 lakshmanan 1u CHR 136,4 0t0 7/dev/pts/4 inita.sh 2971 lakshmanan 2u CHR 136,4 0t0 7/dev/pts/4 inita.sh 2971 lakshmanan 10r REG 8,1 20 393578/home/lakshmanan/inita.sh ======= |
以上输出是前 5 秒没有输出,然后 “inita.sh” 启动后,开始有了输出。
5、最后的技巧
关于磁盘空间告警 df -h --max=1 与 du -hx --max=1 显示不一致的问题,
最常见的的还是下面这种情况:
lsof|grep -i delete
看看被删除的文件:有些删了文件,但是进程没 reload,那些空间还是占用的,你可以理解为类似 windows 下的进程句柄没释放的概念吧~ 只是 windows 下如果有文件被进程使用,你一般是删不掉的,而 linux 虽然不做删除限制,但却要等到进程使用完文件才能完全释放,以防止进程奔溃,这是操作系统对资源的管理差异吧~
例如 nginx 会有很多临时文件占用了 /tmp 目录,删掉后,依然占用着空间,
此时你可以:
pkill -9 nginx && /etc/init.d/nginx restart
1.找出瓶颈
2.硬盘(存储)瓶颈
3.CPU及内存瓶颈
4.网络瓶颈
#1: top - 进程活动
top提供一个当前运行系统实时动态的视图,也就是正在运行进程。在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次。
图01.Linux top命令
常用热键
热键 | 用途 |
---|---|
t | 显示摘要信息开关. |
m | 显示内存信息开关. |
A | 分类显示系统不同资源的使用大户。有助于快速识别系统中资源消耗多的任务。 |
f | 添加删除所要显示栏位. |
o | 调整所要显示栏位的顺序. |
r | 调整一个正在运行的进程Nice值. |
k | 结束一个正在运行的进程. |
z | 彩色/黑白显示开关 |
#2:vmstat -系统活动、硬件及系统信息
使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。
# vmstat 3
输出样例:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0 1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0 0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0 0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0 0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0 0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0 0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0
显示内存使用详细信息
# vmstat -m
显示内存活动/不活动的信息
# vmstat -a
#3: w - 显示谁已登录,他们正在做什么?
w命令显示系统当前用户及其运行进程的信息。
# w username
# w vivek
输出样例:
17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w
#4:uptime - 告诉系统已经运行了多久?
uptime命令过去只显示系统运行多久。现在,可以显示系统运行多久、当前有多少的用户登录、在过去的1,5,15分钟里平均负载时多少。
# uptime
输入样例:
18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
1可以被认为是最优的负载值。负载是会随着系统不同改变得。单CPU系统1-3和SMP系统6-10都是可能接受的。
#5:ps - 显示进程
ps命令显示当前运行进程的快照。使用-A或-e显示所有进程。
# ps -A
输出样例:
PID TTY TIME CMD 1 ? 00:00:02 init 2 ? 00:00:02 migration/0 3 ? 00:00:01 ksoftirqd/0 4 ? 00:00:00 watchdog/0 5 ? 00:00:00 migration/1 6 ? 00:00:15 ksoftirqd/1 .... ..... 4881 ? 00:53:28 java 4885 tty1 00:00:00 mingetty 4886 tty2 00:00:00 mingetty 4887 tty3 00:00:00 mingetty 4888 tty4 00:00:00 mingetty 4891 tty5 00:00:00 mingetty 4892 tty6 00:00:00 mingetty 4893 ttyS1 00:00:00 agetty 12853 ? 00:00:00 cifsoplockd 12854 ? 00:00:00 cifsdnotifyd 14231 ? 00:10:34 lighttpd 14232 ? 00:00:00 php-cgi 54981 pts/0 00:00:00 vim 55465 ? 00:00:00 php-cgi 55546 ? 00:00:00 bind9-snmp-stat 55704 pts/1 00:00:00 ps
ps与top非常相似,但ps提供更多的信息。
输出长格式
# ps -Al
输出附加全格式(显示进程在执行时传入的参数)
# ps -AlF
显示进程结构
# ps -AlFH
在进程后显示线程
# ps -AlLm
打印服务器上所有进程
# ps ax
# ps axu
打印进程树
# ps -ejH
# ps axjf
# pstree
打印安全信息
# ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM
查看使用Vivek用户名运行的进程
# ps -U vivek -u vivek u
设置自定义输出格式
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eopid,tt,user,fname,tmout,f,wchan
只显示Lighttpd的进程ID
# ps -C lighttpd -o pid=
或者
# pgrep lighttpd
或者
# pgrep -u vivek php-cgi
显示PID为55977的进程名称
# ps -p 55977 -o comm=
找出消耗内存最多的前10名进程
# ps -auxf | sort -nr -k 4 | head -10
找出使用CPU最多的前10名进程
# ps -auxf | sort -nr -k 3 | head -10
#6:free - 内存使用情况
free命令显示系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
# free
输出样例:
total used free shared buffers cached Mem: 12302896 9739664 2563232 0 523124 5154740 -/+ buffers/cache: 4061800 8241096 Swap: 1052248 0 1052248
#7:iostat - CPU平均负载,硬盘活动
iostat命令可报告中央处理器(CPU)的统计信息,各种设备、分区及网络文件系统输入/输出的统计信息。
# iostat
输出样例:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009 avg-cpu: %user %nice %system %iowait %steal %idle 3.50 0.09 0.51 0.03 0.00 95.86 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 22.04 31.88 512.03 16193351 260102868 sda1 0.00 0.00 0.00 2166 180 sda2 22.04 31.87 512.03 16189010 260102688 sda3 0.00 0.00 0.00 1615 0
#8:sar - 搜集和报告系统活动
sar命令用来搜集、报告和储存系统活动信息。查看网路计数器,输入:
# sar -n DEV | more
显示最近24小时网络计数器
# sar -n DEV -f /var/log/sa/sa24 | more
你亦可以用sar显示实时情况
# sar 4 5
输出样例:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:45:12 PM CPU %user %nice %system %iowait %steal %idle
06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78
06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52
06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78
06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22
06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19
Average: all 2.02 0.00 0.27 0.01 0.00 97.70
#9:mpstat - 多处理器使用率
mpstat命令可以显示所有可用处理器的使用情况,处理器编号从0开始。mpstat -P ALL显示每个处理器的平均使用率。
# mpstat -P ALL
输出样例:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009 06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04 06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31 06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93 06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00 06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80 06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91 06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98 06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75 06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89
#10: pmap - 进程的内存使用
pmap命令可以显示进程的内存映射,使用这个命令可以找出造成内存瓶颈的原因。
# pmap -d PID
显示PID为47394进程的内存信息。
# pmap -d 47394
输出样例:
47394: /usr/bin/php-cgi
Address Kbytes Mode Offset Device Mapping
0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
.....
......
..
00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 933712K writeable/private: 4304K shared: 768000K
最后一行非常重要:
* mapped: 933712K 内存映射所占空间大小
* writeable/private: 4304K 私有地址空间大小
* shared: 768000K 共享地址空间大小
#11和#12: netstat和ss - 网络相关信息
netstat可以显示网络链接、路由表信息、接口统计信息、伪装链接和多播成员(multicast memberships),ss命令用来显示网络套接字信息,它允许显示类似netstat一样的信息。关于ss和netstat使用,可参考下列资源。
#13: iptraf - 网络实时信息
iptraf是一个可交互式的IP网络监控工具。它可以生成多种网络统计信息包括:TCP信息、UDP数量、ICMP和OSPF信息、以太网负载信息、节点状态、IP校验错误等。有下面几种信息格式:
- 不同网络TCP链接传输量
- 不同网络接口IP传输量
- 不同协议网络传输量
- 不同TCP/UDP端口和不同包大小网络传输量
- 不同第二层地址网络传输量
图02:一般接口信息:不同网络接口IP传输量
图03:不同网络TCP链接传输量
#14:tcpdump:详细的网络流量分析
tcpdump是一个简单网络流量转储工具,然而要使用好需要对TCP/IP协议非常熟悉。例如要显示关于DNS的网络流量,输入:
# tcpdump -i eth1 ‘udp port 53‘
显示所有进出80端口IPv4 HTTP包,也就是只打印包含数据的包。例如:SYN、FIN包和ACK-only包输入:
# tcpdump ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)‘
显示所有到的FTP会话,输入:
# tcpdump -i eth1 ‘dst 202.54.1.5 and (port 21 or 20‘
显示所有到192.168.1.5的HTTP会话
# tcpdump -ni eth0 ‘dst 192.168.1.5 and tcp and port http‘
用wireshark浏览转储文件中的详细信息,输入:
# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80
#15:strace - 系统调用
追踪系统调用和型号,这对于调试Web服务器和其他服务器非常有用。了解怎样追踪进程和他功能。
#16:/proc文件系统 - 各种内核信息
/proc目录下文件提供了很多不同硬件设备和内核的详细信息。更多详情参见Linux kernel /proc。一般/proc例如:
# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts
#17:Nagios - 服务器及网络监控
Nagios 是一款非常流行的系统及网络监控软件。你可以轻松监控所有的主机、网络设备及服务。它能在发生故障和重新恢复后发送警讯。FAN是"Fully Automated Nagios"的缩写。FAN的目标就是由Nagios社群提供Nagios的安装。为了使安装Nagios服务器更加容易,FAN提供一个标准ISO格式的光盘镜像。此发行版中还会包含一组增强用户使用体验的工具。
#18:Cacti - 基于Web的监控工具
Cacti是一套完成的网络图形化解决方案,基于RRDTool的资料存储和图形化功能。Cacti提供一个快速的轮询器、进阶的图形化模板、多种数据采集方法和用户管理功能。这些功能都拥有非常友好易用的界面,确保可以部署在一个包含数百台设备的复杂网络中。它提供关于网络、CPU、内存、已登录用户、Apache、DNS等信息。
#19:KDE System Guard
KSysguard是在KDE桌面下一个网络化的系统监控工具。这个工具可以通过SSH会话运行。它提供很多功能,例如可以监控本机和远程主机的客户端/服务器架构,前端图形界面使用所谓传感器得到信息并展现出来。传感器返回的可以是一个简单的数值或是一组表格的信息。针对不同的信息类型,提供一个或多个显示。这些显示被组织多个工作表中,可以工作表可以独体储存和加载。所以,KSysguard不只是一个简单的任务管理器,还是一个可以控制多台服务器的强大工具。
图05:KDE System Guard
#20:Gnome System Monitor
System Monitor可以显示系统基本信息、监控系统进程、系统资源及文件系统使用率。你也可以使用System Monitor监控和修改系统行为。尽管没有KDE System Guard功能强大,但其提供的基本信息对于入门用户还是非常有用的。
* 显示关于计算机硬件和软件的各种基本信息。
* Linux内核版本
* GNOME版本
* 硬件
* 安装的内存
* 处理器及其速度
* 系统状态
* 当前可用的硬盘空间
* 进程
* 内存及交换空间
* 网络使用率
* 文件系统
* 所有挂载的文件系统及其基本信息
图06:The Gnome System Monitor application