位置:首页 > 后端 > java

JVM性能调优之环境优化

chenlong 发布:2021-10-30 17:37:23阅读:

1.什么是调优

根据需求进行JVM规划和预调优
优化运行JVM运行环境(慢,卡顿)
解决JVM运行过程中出现的各种问题(OOM)

2.调优基础概念

  1. 吞吐量:用户代码时间 /(用户代码执行时间 + 垃圾回收时间)

  2. 响应时间:STW越短,响应时间越好
    所谓调优,首先确定,追求啥?吞吐量优先,还是响应时间优先?还是在满足一定的响应时间的情况下,要求达到多大的吞吐量…

问题:
科学计算,吞吐量。数据挖掘,thrput。吞吐量优先的一般:(PS + PO)
响应时间:网站 GUI API (1.8 G1)

3.调优,从规划开始

  1. 调优,从业务场景开始,没有业务场景的调优都是耍流氓

  2. 无监控(压力测试,能看到结果),不调优

  3. 步骤:
    (1)熟悉业务场景(没有最好的垃圾回收器,只有最合适的垃圾回收器)
    响应时间、停顿时间 [CMS G1 ZGC] (需要给用户作响应)
    吞吐量 = 用户时间 /( 用户时间 + GC时间) [PS]
    (2)选择回收器组合
    (3)计算内存需求(经验值 1.5G 16G)
    (4)选定CPU(越高越好)
    (5)设定年代大小、升级年龄
    (6)设定日志参数
    -Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause
    或者每天产生一个日志文件
    (7)观察日志情况

4.优化环境

  1. 有一个50万PV的资料类网站(从磁盘提取文档到内存)原服务器32位,1.5G
    的堆,用户反馈网站比较缓慢,因此公司决定升级,新的服务器为64位,16G
    的堆内存,结果用户反馈卡顿十分严重,反而比以前效率更低了
    (1)为什么原网站慢?
    很多用户浏览数据,很多数据load到内存,内存不足,频繁GC,STW长,响应时间变慢
    (2)为什么会更卡顿?
    内存越大,FGC时间越长
    (3)咋办?
    PS -> PN + CMS 或者 G1

  2. 系统CPU经常100%,如何调优?(面试高频)
    CPU100%那么一定有线程在占用系统资源,
    (1)找出哪个进程cpu高(top)
    (2)该进程中的哪个线程cpu高(top -Hp)
    (3)导出该线程的堆栈 (jstack)
    (4)查找哪个方法(栈帧)消耗时间 (jstack)
    (5)工作线程占比高 | 垃圾回收线程占比高

  3. 系统内存飙高,如何查找问题?(面试高频)
    (1)导出堆内存 (jmap)
    (2)分析 (jhat jvisualvm mat jprofiler … )

  4. 如何监控JVM
    jstat jvisualvm jprofiler arthas top…


24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看