一.Tomcat压力测试,通过调整参数以及配置优化Tomcat
1.部署一个web工程,测试访问(需安装mysql和jdk)
1.1.1 将SQL脚本执行,生成对应的数据库
将SQL脚本上传到服务器,通过 cat dashboard.sql | mysql -uroot -p
1.1.2 部署项目
将该项目上传到Linux系统中Tomcat解压目录下webapps文件夹
找到项目,修改jdbc.properties配置文件,根据实际情况
1.1.3 启动Tomcat
客户端进行访问:http://192.168.42.123:8080/index
2.Jmeter压力测试工具
解压完成后进入bin目录,双击jmeter.bat启动,启动可以通过Opetions下有个Choose Lanauge选择简体中文
也可修改为白色主题
2.1 新建一个线程组,线程数量为1000,循环次数为10
2.2 点击线程组新建一个HTTP协议取样器
采用http协议,地址为linux地址,端口为tomcat8080端口,访问地址为/index
2.3 添加请求监控
2.4 点击启动进行测试
3.Tomcat优化方案
没有进行任何配置的情况下:
平均请求处理时间:61319
Error错误率:44.38%
吞吐量:12.8/S
3.1 优化方案一:禁用AJP服务
停止tomcat:切换到bin目录通过./shutdown.sh
找到tomacat解压目录的conf文件夹下,将server.xml当中的AJP服务注释
bin目录启动:./startup.sh && tail -f ../logs/catalina.out
测试结果如下:
平均请求处理时间:23900+-
Error错误率:55%+-
吞吐量:20/S+-
3.2 优化方案二:启动执行器(线程池)
测试一:`最多线程为500
初始为50
最大队列等待个数100
将运行模式改为nio2
停止tomcat:切换到bin目录通过./shutdown.sh
找到tomacat解压目录的conf文件夹下,修改server.xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/> <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
bin目录启动:./startup.sh && tail -f ../logs/catalina.out
平均请求处理时间:4200
Error错误率:9.30%
吞吐量:180/S
4.Tomcat优化方案:JVM参数进行优化
4.1 启用并行垃圾收集器
修改catalina.sh配置文件
JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms64m -Xmx512m
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"
使用gceasy.io网站进行日志分析
得出结论:年轻代内存分配太小。整个堆内存分配太小
JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms128m
-Xmx1024m -XX:NewSize=64m -XX:MaxNewSize=256m -XX:+PrintGCDetails
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC
-Xloggc:../logs/gc.log"
4.2 启用G1垃圾收集器
JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms128m
-Xmx1024m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"
G1效率最高
5.Tomcat优化时,要不断的去测试适合当前环境的配置
总结
优化点:1.Tomcat配置
2.JVM参数进行调优