系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存、CPU、硬盘……)出了问题。在Linux系统中,所有的运行参数保存在虚拟目录/proc中,换句话说,我们使用的性能监控工具取到的数据值实际上就是源自于这个目录,当涉及到系统高估时,我们就可以修改/proc目录中的相关参数了,当然有些是不能乱改的。下面就让我们了解一下这些常用的性能监控工具。工具功能描述
uptime系统平均负载率
top进程进行状态
iostatCPU和磁盘平均使用率
vmstat系统运行状态
ps pstree进程列表信息
numastatNUMA架构内存使用情况对比
sar实时收集系统使用状态
free内存使用率
pmap进程内存占用率
strace追踪程序运行状态
ulimit系统资源使用限制
mpstat多处理器使用率
dmesg硬件/系统信息
KDE System Guard图形监控工具
traffic-vis网络监控(只有SUSE有)
※注:下面附图的命令输出信息,以红旗DC Server 5.0 for x86 Sp1,Suse为基础平台,可能在不同的操作系统或核心版本有较大区别,对比时请留意。一、uptimeUptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百分比,而是在队列中等待执行的进程的数量。如果进程要求CPU时间被阻塞(意味着CPU没有时间处理它),load average值将增加。另一方面,如果每个进程都可以立刻得到访问CPU的时间,这个值将减少。UP kernel下的load average的最佳值是1,这说明每个进程都可以立刻被CPU处理,当然,更低不会有问题,只说明浪费了一部分的资源。但在不同的系统间这个值也是不同的,例如一个单CPU的工作站,load average为1或者2都是可以接受的,而在一个多CPU的系统中这个值应除以物理CPU的个数,假设CPU个数为4,而load average为8或者10,那结果也是在2多点而已。
9:24am up 19:06, 1 user, load average: 0.12, 0.13, 0.05你可以使用uptime判断一个性能问题是出现在服务器上还是网络上。例如,如果一个网络应用运行性能不理想,运行uptime检查系统负载是否比较高,如果不是这个问题更可能出现在你的网络上。
也可以查看/proc/loadavg和/proc/uptime两个文件,注意不能编辑/proc中的文件,要用cat等命令来查看,如:liyawei:~ # cat /proc/loadavg
0.00 0.00 0.00 1/55 5505二、topTop命令显示了实际CPU使用情况,默认情况下,它显示了服务器上占用CPU的任务信息并且每5秒钟刷新一次。你可以通过多种方式分类它们,包括PID、时间和内存使用情况。
显示处理器的活动状况。缺省情况下,显示占用CPU最多的任务,并且每隔5秒钟做一次刷新。Process priority的数值决定了CPU处理进程的顺序。LIUNX内核会根据需要调整该数值的大小。nice value局限于priority。priority的值不能低于nice value(nice value值越低,优先级越高)。您不可以直接修改Process priority的值,但是可以通过调整nice level值来间接地改变Process priority值,然而这一方法并不是所有时候都可用。如果某个进程运行异常的慢,可以通过降低nice level为该进程分配更多的CPU。Linux支持的nice levels由19 (优先级低)到-20 (优先级高),缺省值为0。执行/bin/ps命令可以查看到当前进程的情况。
top - 18:31:08 up 174 days, 1:43, 1 user, load average: 0.24, 0.19, 0.11
Tasks:463total,1running,357sleeping,105stopped,0zombie
Cpu(s):2.2%us,0.9%sy,0.0%ni,96.9%id,0.0%wa,0.0%hi,0.0%si
Mem:16631900ktotal,15881988kused,749912kfree,403764kbuffers
Swap:8385888ktotal,85272kused,8300616kfree,3720388kcached
PID USER PR NI VIRT SHR S %MEM TIME+ RES %CPU COMMAND
406 chartis_ 16 0 4560 556 T 0.0 0:00.00 636 0.0 iostat
1582 chartis_ 16 0 4852 516 T 0.0 0:00.00 788 0.0 man
1585 chartis_ 16 0 5400 800 T 0.0 0:00.00 920 0.0 sh
1586 chartis_ 16 0 5400 304 T 0.0 0:00.00 424 0.0 sh
1591 chartis_ 16 0 3532 520 T 0.0 0:00.00 652 0.0 less
2726 chartis_ 16 0 10044 1944 T 0.0 0:00.01 3008 0.0 vim
2888 chartis_ 16 0 4668 488 T 0.0 0:00.00 568 0.0 more
3293 chartis_ 16 0 5324 516 T 0.0 0:00.00 788 0.0 man
3296 chartis_ 16 0 5524 800 T 0.0 0:00.00 920 0.0 sh
3297 chartis_ 16 0 5524 304 T 0.0 0:00.00 424 0.0 sh
3301 chartis_ 16 0 5400 896 T 0.0 0:00.00 1024 0.0 nroff
3302 chartis_ 16 0 3604 520 T 0.0 0:00.00 648 0.0 less
3310 chartis_ 16 0 5540 440 T 0.0 0:00.00 564 0.0 iconv
4301 chartis_ 16 0 4380 516 T 0.0 0:00.00 788 0.0 man
4304 chartis_ 16 0 5592 800 T 0.0 0:00.00 916 0.0 sh
4305 chartis_ 16 0 5592 304 T 0.0 0:00.00 420 0.0 sh
4310 chartis_ 16 0 3212 520 T 0.0 0:00.00 652 0.0 less
8194 chartis_ 16 0 2704 752 T 0.0 0:00.06 1132 0.0 top
9744 chartis_ 16 0 3744 752 T 0.0 0:06.69 1144 0.0 top
下面是输出值的介绍:
引用
PID:进程标识USER;进程所有者的用户名PRI:进程的优先级NI:nice级别SIZE:进程占用的内存数量(代码+数据+堆栈)RSS;进程使用的物理内存数量SHARE;该进程和其他进程共享内存的数量STAT:进程的状态:S=休眠状态,R=运行状态,T=停止状态,D=中断休眠状态,Z=僵尸状态%CPU:共享的CPU使用%MEM;共享的物理内存TIME:进程占用CPU的时间COMMAND:启动任务的命令行(包括参数)
进程的优先级和nice级别进程优先级是一个决定进程被CPU执行优先顺序的参数,内核会根据需要调整这个值。Nice值是一个对优先权的限制。进程优先级的值不能低于nice值。(nice值越低优先级越高)进程优先级是无法去手动改变的,只有通过改变nice值去间接的调整进程优先级。如果一个进程运行的太慢了,你可以通过指定一个较低的nice值去为它分配更多的CPU资源。当然,这意味着其他的一些进程将被分配更少的CPU资源,运行更慢一些。Linux支持nice值的范围是19(低优先级)到-20(高优先级),默认的值是0。如果需要改变一个进程的nice值为负数(高优先级),必须使用su命令登陆到root用户。下面是一些调整nice值的命令示例,以nice值-5开始程序xyz
#nice –n -5 xyz
改变已经运行的程序的nice值
#renice level pid
将pid为2500的进程的nice值改为10
#renice 10 2500
僵尸进程当一个进程被结束,在它结束之前通常需要用一些时间去完成所有的任务(比如关闭打开的文件),在一个很短的时间里,这个进程的状态为僵尸状态。在进程完成所有关闭任务之后,会向父进程提交它关闭的信息。有些情况下,一个僵尸进程不能关闭它自己,这时这个进程状态就为z(zombie)。不能使用kill命令杀死僵尸进程,因为它已经标志为“dead”。如果你无法摆脱一个僵尸进程,你可以杀死它的父进程,这个僵尸进程也就消失了。然而,如果父进程是init进程,你不能杀死init进程,因为init是一个重要的系统进程,这种情况下你只能通过一次重新启动服务器来摆脱僵尸进程。也必须分析应用为什么会导致僵死?三、iostatiostat是sysstat包的一部分。Iostat显示自系统启动后的平均CPU时间(与uptime类似),它也可以显示磁盘子系统的使用情况,iostat可以用来监测CPU利用率和磁盘利用率。avg-cpu: %user %nice %system %iowait %steal %idle
0.16 0.01 0.03 0.10 0.00 99.71
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 0.31 4.65 4.12 327796 290832
avg-cpu: %user %nice %system %iowait %steal %idle
1.00 0.00 0.00 0.00 0.00 100.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 99.01
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 0.00 0.00 0.00 0 0CPU利用率分四个部分:
引用
%user:user level(应用)的CPU占用率情况%nice:加入nice优先级的user level的CPU占用率情况%sys:system level(内核)的CPU占用情况