linux命令
top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。
每一个字段的具体含义可以参见每天一个linux命令(44):top命令
,这篇文章写的很全面。
另外对于Load Average的解释可参考一幅图秒懂LoadAverage(负载)上对于Load的解释:
Load < 0.7时:系统很闲,马路上没什么车,要考虑多部署一些服务
0.7 < Load < 1时:系统状态不错,马路可以轻松应对
Load == 1时:系统马上要处理不多来了,赶紧找一下原因
Load > 5时:马路已经非常繁忙了,进入马路的每辆汽车都要无法很快的运行.
free
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区
主要记住有如下几个选项就好了。
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-g:以GB为单位显示内存使用情况。
java命令
jps
全称:JVM Process Status Tool
-l: 输出应用程序主类完整package名称或jar完整名称。
-v: 列出jvm参数, 这个比较有用,利于分析。
-m:输出主函数传入的参数。
jstat
全称:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据。
用的比较多的是-gcutil选项。
例子:
jstat -gcutil 21891 250 7
S0 S1 EOP YGC YGCT FGC FGCT GCT
12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.672
12.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.672
12.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.672
0.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673
这个例子的输出显示,年轻一代收集发生在第三和第四样本之间。收集耗时0.001秒,将物体从Eden空间(E)推广到旧空间(O),导致旧空间利用率从9.49%增加到9.51%。在收集之前,幸存者空间利用率为12.44%,但收集后只有7.74%被利用。
jmap
我用的比较多的是jmap -heap 19798,可以看到GC用的是什么算法,以及目前堆栈使用情况。
笔者还处于性能问题的初学阶段,此文仅供参考。待后续实战经验丰富,会继续完善本文。