标签:des http java 使用 os io 文件 for
JVM调优接触不多,这边只是简单使用jstat命令观测Java堆内存垃圾回收情况。
简单处理过程为:
1、先获取到pid
先获取到pid,通过命令:
ps -ef|grep xxx-service-name
或者可以采用jps -vl或者jps -l命令查看pid
2、查看内存/GC情况
jstat命令查看,jstat是jdk自带的一个轻量级小工具
全称为:Java Virtual Machine statistics monitoring tool。
jstat -gcutil pid #统计heap的gc情况
jstat -gcutil -t pid 250 5 #250毫秒采样5次
jstat -gc -t pid 250 5
更细的监控命令还有:
jstat -gcnew pid 统计新生代的gc情况
jstat -gcold pid 统计老年代的gc情况
jstat -gccapacity pid 统计不同的generations新生代、老生代、永久代相应的heap容量信息
jstat -gccause pid 统计gc的情况以及引起gc的事情,同-gcutil
[java@s2_xx xxx-service-name]$ jstat -gcutil 10500
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
 40.13   0.00  66.98   8.98  63.72     10    0.271     0    0.000    0.271
S0	Heap上的Survivor space 0区已使用空间的百分比
S1	Heap上的Survivor space 1区已使用空间的百分比
E	Heap上的Eden space区已使用空间的百分比
O	Heap上的Old space区已使用空间的百分比
P	Perm space区已使用空间的百分比
YGC	从应用程序启动到采样时发生Young GC的次数
YGCT	从应用程序启动到采样时Young GC所用的时间(单位为秒)
FGC	从应用程序启动到采样时发生Full GC的次数
FGCT	从应用程序启动到采样时Full GC所用的时间
GCT	从应用程序启动到采样时用于垃圾回收的总时间
jstat -gcutil -h10 -t 10500 250 30 #每隔10行输出一次列表头
[java@s2_xx xxx-service-name]$ jstat -gcnew 10500
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
41792.0 40320.0 9376.9    0.0  1  15 40320.0 180032.0  55208.5     24    0.531
S0C	分配S0区42M内存大小
S1C	分配S1区40M内存大小
S0U	S0区已经使用的内存大小,9M左右
S1U	S1区已经使用的内存大小,0M
TT	tenuring threshold阀值,用于控制对象在新生代存活的最大次数
DSS	desired survicor size
3、dump到本地分析是否有内存泄露
借助jmap命令即可
jmap -dump:format=b,file=/tmp/heap.bin pid
dump文件最好在FGC时候处理,如果可以的话,这样可以更加准确发现问题。
然后在本地用mat分析即可
Eclipse mat,下载地址为:http://www.eclipse.org/mat/
另外判断是否有死循环、死锁等问题,可以通过jstack命令观察。
附加补充:
1 JVM内存大致划分
	JVM堆内存=新生代+老年代+持久代
	新生代=S0+S1+Eden区
	老年代为Old space
	持久代为Perm space
2 机器配置查看
	s2-xf为centos Linux64位 16核 32G内存设备。
	cat /proc/version	查看操作系统版本
	cat /proc/cpuinfo	查看cpu信息
	free			查看内存信息
	cat /proc/meminfo	查看系统内存信息
标签:des http java 使用 os io 文件 for
原文地址:http://www.cnblogs.com/pinefantasy/p/3909380.html