上次参加了悟云同学的分享后,感触颇多啊,工具、命令,这些功能都太强大了。记得听过一句话:eclipse的快捷键用的越熟练,越是高手。工具、命令也同样如此。看到悟云那么熟练的操作,真是羡慕嫉妒啊,呵呵。玩笑之后总结下linux中常用性能监控工具和命令。
(1) top
一种监控进程和系统整体性能的理想方法,不受用户限制,普通用户和root用户都可以运行top。该命令通过用户按键来不断刷新当前状态。执行该命令后,它将独占前台,直到用户终止该程序为止。不过该命令中的很多特性都可以通过交互式命令或在个人定制文件中进行设定。
范例1:top命令查看系统状况
>top
top - 16:52:17 up 3 min, 1 user, load
average: 0.10, 0.27, 0.14
Tasks: 55 total, 1 running, 54 sleeping,
0 stopped, 0 zombie
Cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.0%
id, 0.0% wa, 0.3% hi, 0.0% si
Mem: 251924k total, 238168k used, 13756k
free, 4420k buffers
Swap: 0k total, 0k used, 0k free, 165200k
cached
PID USER PR NI VIRT RES SHR S %CPU %MEM
TIME+ COMMAND
4404 root 15 0 66540 16m 13m S 0.3 6.9
0:02.31 kdeinit
1 root 16 0 1772 544 464 S 0.0 0.2 0:00.61
init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00
ksoftirqd/0
其中每列显示的信息如下:
第一行:当前时间、系统启动时间、当前系统登录用户数目、平均负载;
第二行:进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数;
第三行:(CPU状态)用户占用、系统占用、优先任务占用、闲置任务占用;
第四行:(内存状态)平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存;
第五行:(交换状态)平均可用交换容量、已用容量、闲置容量、交换高速缓存容量;
剩下几行显示的就是各进程的列表情况。
(2) mpstat
该命令不但可以查看所有CPU的平均信息,还能查看指定CPU的信息。通过该命令查看的信息存放在proc/stat文件中
这里先补充两个文件:
/proc/stat如下
cpu 432661 13295 86656 422145968 171474
233 5346
cpu0 123075 2462 23494 105543694 16586
0 4615
cpu1 111917 4124 23858 105503820 69697
123 371
intr 1065711094 1057275779 92 0 6 6
0 4 0 3527 0 0 0 70 0 20 0 0
其中:第一行显示系统启动以后的平均信息;从第二行开始,输出前一个时间段的平均信息。
区别另一个文件:
/proc/loadavg: 该文件记录所有cpu的集合信息,显示为平均值,不能给出每个CPU的信息。
在回头看看mpstat,该命令结合不同的参数,会得到不同的期望结果。比如:不带参数时,输出为系统启动以来的平均值;再如:mpstat
-P ALL 2 3 输出每2秒产生4个处理器的统计数据报告。
mpstat -P ALL 2 3
Linux 2.6.9-5.31AXsmp (builder.redflag-linux.com)
12/16/2005
09:38:46 AM CPU %user %nice %system
%iowait %irq %soft %idle intr/s
09:38:52 AM all 23.69 0.00 2.37 0.37
0.00 0.12 73.44 1028.36
Average: 0 2.00 0.00 1.16 0.17 0.00
0.17 96.51 48.75
Average: 1 65.72 0.00 3.16 0.67 0.00
0.00 29.95 12.31
其中第一行给出了从系统引导以来的所有活跃数据。后面的每行对应一个处理器的活跃状态。
(3) uptime
该命令用来报告系统已经运行多长时间
范例:
[root@localhost ~]# uptime
12:20:49 up 3 days,9:20, 5 users, load
average 1.10 1.32 1.15
如上依次表达的信息是:现在时间、系统已经运行的时间、目前登录用户数、1分钟内的系统平均负载、5分钟内系统平均负载、15分钟系统平均负载。
一般情况下,如果系统有n个CPU而且平均负载小于n,说明某些CPU还有空闲的时间片。
通过该命令,我们可以确定cpu是否繁忙。
(4)Jstat
该命令可以帮助我们解决性能测试过程中:java虚拟机内存使用情况监控、判断JV,是否存在内存问题、垃圾回收是否正常这些问题。区别于top:top主要是监控总体饿系统资源,很难定位到java应用程序。
Jstat在性能测试过程中功能相当强大,下面详细介绍测试过程中共会用到的一些参数:
jstat -class pid:显示加载class的数量,及所占空间等信息;
jstat -compiler pid:显示VM实时编译的数量等信息;
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间;
此外还有一个时间参数:
例如:
[root@localhost bin]# jstat -printcompilation
25917 1000 2
每1000毫秒打印一次,一共打印2次
Compiled Size Type Method
788 73 1 java/io/File <init>
788 73 1 java/io/File <init>
(5)jmap
该命令可以从进程中获得内存的具体匹配情况,包括heap size、perm
size等。
例如:
[root@localhost bin]# jmap -histo 25917
Attaching to process ID 26221, please
wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 1.5.0_08-b03
Size Count Class description
-------------------------------------------------------
3722768 30467 * ConstMethodKlass
1976480 25334 char[]
1907880 46994 * SymbolKlass
。。。。
(6)jstack
jstack工具可以用来获得java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
总结常用性能监测工具如上,期待更多工具,学以致用。
|