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值一样
还没有评论,来说两句吧...