JVM分析工具以及JVM常用调优参数

#查看java中的所有线程
top -H -p pid[进程号]
pidstat -p pid -u -t[线程级]
#查看启动java进程
jps
#查看Java内存信息  jmap
jmap -heap pid   ===>查看Java进程的堆分配信息
jmap -histo pid  ===>导出堆信息
jmap -dump:live,file=dumpfile pid  ===>导出堆信息
jhat dumpfile   ===>可以与上面jmap -dump导出的堆文件  通过网址查看堆信息

#查看java栈信息 jstack
jstack -l pid  > jstack.log   可以打印出栈信息   pid是Java进程
jstack.log   分析===》需要找出Java进程中CPU使用频率较高的线程   在把线程的pid转换成16进制  在日志找出对应的栈信息 就可以找到对应的类使用情况  在修改代码

#实时监控Java进程的堆使用情况
jstat -gcutil pid[进程号]  3s[几秒输出一次]   堆使用情况统计
jstat -class pid  类加载统计
jstat -compiler pid  编译统计

#=====================================jvm参数设置================================
JAVA_OPTS="-server -Xms1280m -Xmx1280m -XX:PermSize=128M -XX:MaxNewSize=512m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/sda6/heapdump/tomcat_test "

-server  使用service版的jdk  性能比client版的jdk好
-Xms 堆初始化大小  默认是  系统内存的1/64  Xms 和 Xmx最好配置一样
-Xmx 堆最大内存    默认是  系统内存的1/4
-Xmn 年轻代堆大小   Eden+From+To
-XX:NewSize  年轻代大小
-XX:MaxNewSize 年轻代最大值
-XX:PermSize 持久带初始值  jdk1.7    1.8===>-XX:MaxMetaspaceSize  元数据区  直接使用堆外内存
-XX:MaxPermSize 持久带最大值  jdk1.7
-Xss  每个线程的堆栈大小  jdk1.5之后默认是1M  可以根据程序自身的情况进行优化
-XX:NewRatio   年轻代与老年代的比例  例如4  就是1:4的比例进行分配
-XX:SurvivorRatio  survivor与Eden的比例 例如8  就是 2:8的比例进行分配
-XX:MaxTenuringThreshold  年轻代GC几次后进入老年代  需要配置改参数  为0的话Eden gc完要是对象存活下来 就直接进入老年代
-XX:MaxDirectMemorySize  最大直接内存(堆外内存)  默认值跟-Xmx值一样
 

你可能感兴趣的:(JVM)