JVM调优

敬zing

内存泄露和内存溢出

内存泄漏:memory leak 没用的对象占用了内存
内存溢出:Out of memory 有用和没有的对象,一起撑爆了内存

调优细节

-Xms 堆最小大小 和 -Xmx堆最大大小,值最好是一样的。否则会造成动态伸缩,浪费系统计算资源。

调优查看命令及解释

-XX:+PrintGC [PrintGCDetails ,PrintGCTimeStamps ,PrintGCCauses] GC情况查看

在这里插入图片描述>>GC日志解释,按照顺序
1、非FullGC,就是年轻代GC
2、GC原因
3、年代 new一般是年轻代
4、回收前年轻代内存大小,回收后年轻代内存大小,整个年轻代大小
5、回收前堆内存占用空间,回收后堆内存占用空间,总堆空间
6、执行时间,用户态时间,内核态时间,总共的时间

在这里插入图片描述
堆溢出异常情况日志解释:(total大小 = eden+1个Survivor区大小)
used:已经使用
capacity:总容量
committed:虚拟内存占用
reserved:虚拟内存保留

Heap 堆内存区
def new generation 新生代区
eden区
from to 两个survivor区
tenured generation 老年代区
Metaspace 元数据区
class space class区

一长串解释:起始地址,使用空间结束地址,整体空间结束地址

吞吐量与响应时间

吞入量:用户代码时间/(用户代码执行时间+垃圾回收时间)(PS+PO)
响应时间:STW越短,响应时间越好(G1,PN+CMS)

调优主要是看优先满足吞吐量,还是优先满足响应时间,或者是在满足一定吞吐量的条件下,响应时间较快。


数据挖掘,科学计算。吞吐量优先的一般: (PS+PO)
响应时间优先,网站,API (1.8 G1优先,也可以选择PN+CMS)

调优思路

1、根据需求进行JVM规划和预调优
2、优化JVM运行环境
3、解决JVM运行过程中出现的各种问题

JVM规划和预调优
1、根据业务场景调优,根据业务场景进行压测 (淘宝双11 54w并发,12306 百万并发)
2、必须根据压测,看到调优结果

3、步骤
1、业务场景,根据吞吐量和响应时间,使用合适的垃圾回收器
2、计算内存需求,使用多大的内存
3、选定CPU,越高越好
4、设置年代大小,和升级老年代年龄
5、设置GC日志参数,循环覆盖生成指定大小的几个文件,或者每天生成一个文件
6、观察日志情况

服务器内存配置大小
根据高峰时期的最大每秒处理的订单数TPS,根据经验设置内存大小。也可以计算一个订单需要多大内存,比如512K*1000,每秒1000的订单,500m就够了,但是如果处理响应速度快,在1秒内可以处理一半,则需要250m就够了,这个的内存是难以预期的

应根据要求的响应时间,进行压测。根据cpu算力和实际内存大小,如果不行加机器,上云,或者扔到缓存里,消息队列,redis,一点点处理


优化内存环境

因处理缓慢升级服务器内存,反而变更慢
内存不足导致频繁GC, STW时间长。在服务器扩容后,内存越大,FullGC时间越长。
使用G1,PN+CMS,并发处理GC和应用程序

CPU 100%
1、找出哪个进程CPU高(top)
2、该进程哪个线程CPU高(top -Hp)
3、导出该线程堆栈(jstack)
4、查找哪个方法(栈帧)消耗时间(jstack)

内存 100%
1、导出堆内存(jmap)
2、分析(jhat jvisualvm)

监控JVM
arthas,jstat,jvisualvm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值