DevOps

JVM性能监控详解

2018-04-24  本文已影响0人  4e8ea348373f

一,JVM内存管理--运行时数据区

image.png

二,堆内存

1.新生代
2.老年代
3.持久代

image.png

三,垃圾回收器

1.新生代回收 Minor GC
2.老年代回收 major(full)l GC
3.持久代不需要回收

四,工作要点

1.Minor GC Eden 存活区1 存活区2 刚刚创建对象在Eden 活过第一次,活过第二次等 挺过存活区到老年代

image.png image.png image.png

2.Major GC 会导致性能急剧下降,卡死 也成为Full GC 原因 老年代的对象太多

image.png

五,设置堆空间

image.png

六,堆内存的调整参数

-Xmx 新生代和老年代总和
-Xms 二者初始化空间之和
-XX:NewSize 新生代初始空间
-XX:MaxNewSize 新生代的最大空间
-XX:MaxPermSize 持久代最大空间
-XX:PermSize 持久代初始空间

七,堆内存调整

catalina.sh 中有两个环境变量
CATALINA_OPTS:仅对启动运行的tomcat实例的java虚拟机生效
JAVA_OPTS 对本机上所有的java虚拟机生效
配置好环境变量 [root@node1 ~]# export CATALINA_OPTS="-Xmx256m"

八,性能监控工具

1.问题

OutOfMemoryError 内存耗尽,内存不足 原因:内存泄漏,线程死锁,锁竞争,java消耗过多的cpu

2.工具

1.jps 监控jvm进程状态信息 jps [options] [host] -m: 输出传入main方法的函数,-l 显示main类的完整类名, -v 显示为jvm虚拟机指定的参数
2.jstack 查看某个java进程内的线程堆栈信息 jstack [options] [pid] -l 输出完整的锁信息 -m混合模式会输出java堆栈及C/C++堆栈信息 利用top获取最耗cpu的java进程,取出pid 交给jstack即可
3.jmap jmap [options] [pid] 查看堆内存使用情况 -heap 详细输出堆内存使用状况 -histo[:live] 查看堆内存中的对象数目,大小统计结果
4.jhat [pid]
5.jstat jvm统计监测工具 jstat [pid] [options] options必须,使用jstat -options 列出
6.jconsole和jvisualvm

上一篇下一篇

猜你喜欢

热点阅读