大促高并发系统下JVM如何调优 |
您所在的位置:网站首页 › 高并发量的系统优化 › 大促高并发系统下JVM如何调优 |
JVM调优实战
JVM调优实战以web项目为例。调优主要从两个方面入手,一是tomcat容器的优化,二是JVM虚拟机的调优。调优的原则是控制变量法,先优化tomcat,再优化JVM虚拟机,二者不要同时进行,否则,可能越调性能越差。 下面我们首先来进行tomcat容器的优化。 tomcat优化1.禁用AJP服务 #优化一:禁用AJP服务,一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。 #将下面的配置注释掉2.设置tomcat的线程池 #优化二:设置线程池,并且调整最大并发线程数3.设置tomcat的运行模式为NIO2模式 #优化三:设置tomcat运行模式为nio2,tomcat的运行模式有3种:bio、nio、apr,其中nio2是nio的升级版,在 tomcat8中才支持的,建议采用nio2模式。 压力测试我们在优化了tomcat之后,先使用压力测试工具测试下,是否已经满足性能指标。如果不满足性能指标,再考虑进行JVM虚拟机调优。这里我们进行压力测试的工具是jmeter。 使用jmeter压测工具钳,需要先对jmeter的参数进行调整。修改jmeter.bat文件。 调整jmeter参数 set HEAP=-Xms1g -Xmx4g -XX:MaxMetaspaceSize=512m 在该文件中可以看到,jmeter默认使用的垃圾收集器是G1. Defaults to '-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20' 添加gc日志相关参数 #内存设置较小是为了更频繁的gc,方便观察效果,实际要比此设置的更大 JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms64m -Xmx128m - XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC - Xloggc:../logs/gc.log -Dcom.sun.management.jmxremote - Dcom.sun.management.jmxremote.port=9999 - Dcom.sun.management.jmxremote.authenticate=false - Dcom.sun.management.jmxremote.ssl=false" GC日志解析在使用jmeter初始测试后,会生成一个gc日志。GC日志的内容有很多,直接查看GC日志很不方便,也不不好分析GC过程。因此,我们需要借助GC日志分析工具来解析GC日志,生成GC日志的图形化表格。我们这里使用GC Easy。(http://gceasy.io/) 将GC 日志上传到GC Easy,可以得到如下GC 过程的图形化表格。JVM内容大小: 吞吐量: 堆内存: 从上面的GC 日志分析工具中可以看到,在程序运行过程中多次触发了Full GC。因此,我们在做JVM调优的思路如下: 先考虑增大堆内存,增大年轻代大小,再进行压测。如果多次增大堆内存后,性能没有明显提升时,在保存最优堆内存情况下,考虑需要更换垃圾收集器,然后再进行压测。更换垃圾收集器需要考虑到业务场景,我们的业务是以吞吐量为主要目标,还是以低延迟是目标,根据性能目标的不同来选择垃圾收集器。例如:选择Parallel 垃圾收集器,G1垃圾收集器,还是ZGC。我们最后选择什么垃圾收集器还是要依赖于压测结果。 调优建议 生产环境的JVM一定要进行参数设定;参数设定不能拍脑袋,需要从实际出发,根据压测结果来定;内存中临时对象较多,将年轻代调大一些。如果是G1或者ZGC就不需要特别指定;调优过程依赖于GC 日志的分析结果,来找到问题;低延迟的应用建议使用G1或者ZGC;不要完全只考虑JVM参数,当JVM参数调到无法再调之后,需要考虑影响性能的其他因素,比如:容器,硬件性能等。 超大流量电商大促高并发系统下JVM调优思路这种场景下的JVM调优,千万不要被标题吓到。我们要将问题按实际场景分解,分解成一个个小问题,然后针对一个个小问题来解决。例如,百亿流量的电商网站的调优,可以按照如下的思路进行分解。 上面只是给出了一个大促期间高并发系统的调优思路,具体还需要根据业务场景,环境等具体分析。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |