JVM-调优

  • jps 查看进程 id
  • Jmap 查看内存信息,实例个数以及占用内存大小
    • jmap -histo pid
    • jmap ‐dump:format=b,file=eureka.hprof 14660
  • Jstack 查找死锁
    • jstack 19663 | grep -A 10 4cd0
    • 需要把 top 里的 tid 转为十六进制
  • Jinfo 查看正在运行的Java应用程序的扩展参数
  • Jstat 查看堆内存各部分的使用量,以及加载类的数量
    • jstat -gcutil pid
    • jstat -gc pid 垃圾回收统计
      • 年轻代对象增长的速率
      • Young GC的触发频率和每次耗时
      • 每次 Young GC 后有多少对象存活和进入老年代
      • Full GC 的触发频率和每次耗时
    • jstat -gccapacity pid 堆内存统计
    • jstat -gcnew pid 新生代垃圾回收统计
    • jstat -gcnewcapacity pid 新生代内存统计
    • jstat -gcold pid 老年代垃圾回收统计
    • jstat -gcoldcapacity pid 老年代内存统计
    • jstat -gcmetacapacity 元数据空间统计
  • jvisualvm
  • Arthas:dashboard;thread;ognl
  • 内存溢出自动导出dump文件:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
  • GC日志:‐XX:+PrintGCDetails
  • java -XX:+PrintFlagsInitial 表示打印出所有参数选项的默认值
  • java -XX:+PrintFlagsFinal 表示打印出所有参数选项在运行程序时生效的值

  • 优化思路:尽量让每次Young GC后的存活对象小于Survivor区域的50%,都留存在年轻代里。尽量别让对象进入老年代。尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响
  • 系统频繁Full GC导致系统卡顿:结合对象挪动到老年代那些规则推理下程序可能存在的一些问题
    • 尤其是对象动态年龄判断机制:把年轻代适当调大点
    • 老年代空间分配担保机制
      • 大对象问题:jmap -histo pid 找出大对象(结合cpu占用较高的线程),然后优化代码
  • 内存泄露
    • 一些老旧数据没有及时清理导致一直占用内存,时间长了除了导致 full gc,还有可能导致 OOM
      • hashmap存放缓存数据而没设置淘汰算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值