JVM系列(9)——调优初体验

9 篇文章 1 订阅
本文介绍了JVM的垃圾回收机制,包括常见的垃圾回收器如Serial、Parallel、CMS和G1的特点,以及如何根据吞吐量和响应时间选择合适的回收器。同时,讲解了垃圾回收日志的查看和解析,并提供了调优的步骤,包括选择垃圾回收器、计算内存需求、设置日志参数和进行压力测试等。此外,文中还给出了应对高并发场景的服务器配置示例和解决CPU、内存问题的调优方法。
摘要由CSDN通过智能技术生成

学习这篇文章之前,要了解:
JVM系列(2)——垃圾回收
JVM系列(3)——内存分配与回收策略
先了解概念:
吞吐量:用户执行时间/(用户执行时间+垃圾回收时间);就是干正经事的时间占比。
响应时间:STW越短,响应越好。
调优调的就是这两个。

一、常见垃圾回收器

在这里插入图片描述
经常组合使用:
Serial+Serial Old 串行回收
在这里插入图片描述
Parallel Scanvenge+ParallelOld PS+PO 并行回收(jdk1.8默认)——吞吐量优先
在这里插入图片描述
ParNew+CMS组合:PN更注重响应时间,PS则是吞吐量优先。并发标记清除,可以达到最短STW时间。
但是,第四步并发清理时,会产生浮动垃圾,这个时候尽量提高老年代的空间,以防内存溢出。
或者:降低触发CMS的阈值。
在这里插入图片描述
另外,还有G1垃圾回收器,另外文章再总结。——响应时间优先

二、垃圾回收日志查看

我们拿Parallel举例:
配置参数是将日志输出在gc.log中。

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-Xloggc:gc.log

一段简单的代码:

    public static void main(String[] args) {
        String a  = "111";
        System.out.println(a);
        Thread b = new Thread();
    }

输出日志如下:
在这里插入图片描述
很明显,total总量,used使用量,capacity也是总量。
其中,committed是虚拟内存占用,reserved是虚拟内存保留。(了解就行)
还有一部分日志如下:

 [GC (Allocation Failure) [PSYoungGen: 33280K->3822K(38400K)] 33280K->3830K(125952K), 0.0043770 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 

怎么解释呢,我们看马老师的一张图:
在这里插入图片描述

三、调优步骤

1、调优调什么?

JVM规划、优化JVM运行环境、解决JVM运行中的问题。

2、调优步骤

(1)根据可能业务场景选定合适的垃圾回收器:
吞吐量or响应时间,或者兼顾
(2)大致计算内存需求、选定好CPU(根据经验或者业务架构)
(3)设置各年代大小、升级年龄,分配好内存
(4)设置日志参数、观察日志情况(类似于log4j,循环覆盖)
(5)前面各种设置,一定要根据实际业务情况,做好压力测试,及时调整。

四、两个例子

1、每天百万订单的一个网站,怎么设计服务器配置?
5-7点的话是72w订单的话,每秒1000并发,那就计算1个订单产生多少内存(比如1M),那每秒就是1000M。2G内存肯定够用了。
如果是10ms之内要能承受多少订单,可以预先压测。
2、12306的百万并发怎么支撑?
CDN(全国很多节点)-LVS-Nginx-单个业务系统(1000台机器)—单个机器(比如100并发)。
简单来说:分而治之。
3、CPU占100%,怎么调优?
(1)找出CPU高的进程(top);
(2)找出进程中的高cpu线程(top+Hp)
(3)导出线程堆栈(jstack)
(4)查找具体方法(栈帧)消耗时间(jstack)
4、系统内存飙升,怎么解决?
(1)导出堆内存(jmap)
(2)分析(jhat)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值