Tomcat优化(压力测试)
一.Tomcat压力测试,通过调整参数以及配置优化Tomcat
1.部署一个web工程,测试访问
1.1.1 将SQL脚本执行,生成对应的数据库
将SQL脚本上传到服务器,通过 cat 脚本.sql | mysql -uroot -p
1.1.2 部署项目
找到项目,修改jdbc.properties配置文件
将该项目上传到Linux系统中Tomcat解压目录下webapps文件夹
1.1.3 启动Tomcat
客户端进行访问:http://192.168.7.22:8080/dashboard-web/index
2.Jmeter压力测试工具
解压完成后进入bin目录,双击jmeter.bat启动,启动可以通过Opetions下有个Choose Lanauge选择简体中文
2.1 新建一个线程组,线程数量为1000,循环次数为10
2.2 点击线程组邮件新建一个HTTP协议取样器
采用http协议,地址为linux地址,端口为tomcat8080端口,访问地址为dashboard-web/index
2.3 新建一个查询结果,点击启动进行测试
3.Tomcat没有进行任何配置的情况下:
平均请求处理时间:6195
Error错误率:0.00%
吞吐量:154/S
3.1 优化方案一:禁用AJP服务
停止tomcat:切换到bin目录通过./shutdown.sh
找到tomacat解压目录的conf文件夹下,将server.xml当中的AJP服务注释
bin目录启动:./startup.sh && tail -f ../logs/catalina.out
测试结果如下:
平均请求处理时间:5200
Error错误率:0.00%
吞吐量:170/S
3.2 优化方案二:启动执行器(线程池)
测试一:最多线程为500,初始为50
停止tomcat:切换到bin目录通过./shutdown.sh
找到tomacat解压目录的conf文件夹下,将server.xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true"/>
1.部署一个web工程,测试访问
1.1.1 将SQL脚本执行,生成对应的数据库
将SQL脚本上传到服务器,通过 cat 脚本.sql | mysql -uroot -p
1.1.2 部署项目
找到项目,修改jdbc.properties配置文件
将该项目上传到Linux系统中Tomcat解压目录下webapps文件夹
1.1.3 启动Tomcat
客户端进行访问:http://192.168.7.22:8080/dashboard-web/index
2.Jmeter压力测试工具
解压完成后进入bin目录,双击jmeter.bat启动,启动可以通过Opetions下有个Choose Lanauge选择简体中文
2.1 新建一个线程组,线程数量为1000,循环次数为10
2.2 点击线程组邮件新建一个HTTP协议取样器
采用http协议,地址为linux地址,端口为tomcat8080端口,访问地址为dashboard-web/index
2.3 新建一个查询结果,点击启动进行测试
3.Tomcat没有进行任何配置的情况下:
平均请求处理时间:6195
Error错误率:0.00%
吞吐量:154/S
3.1 优化方案一:禁用AJP服务
停止tomcat:切换到bin目录通过./shutdown.sh
找到tomacat解压目录的conf文件夹下,将server.xml当中的AJP服务注释
bin目录启动:./startup.sh && tail -f ../logs/catalina.out
测试结果如下:
平均请求处理时间:5200
Error错误率:0.00%
吞吐量:170/S
3.2 优化方案二:启动执行器(线程池)
测试一:最多线程为500,初始为50
停止tomcat:切换到bin目录通过./shutdown.sh
找到tomacat解压目录的conf文件夹下,将server.xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
bin目录启动:./startup.sh && tail -f ../logs/catalina.out
平均请求处理时间:4200
Error错误率:9.30%
吞吐量:180/S
测试一:最多线程为1000,初始为200
平均请求处理时间:5000
Error错误率:1.3%
吞吐量:165/S
单纯对线程进行提升,是不能够完全提交Tomcat性能
测试二:设置最大队列等待个数
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>
connectionTimeout="20000"
redirectPort="8443" />
bin目录启动:./startup.sh && tail -f ../logs/catalina.out
平均请求处理时间:4200
Error错误率:9.30%
吞吐量:180/S
测试一:最多线程为1000,初始为200
平均请求处理时间:5000
Error错误率:1.3%
吞吐量:165/S
单纯对线程进行提升,是不能够完全提交Tomcat性能
测试二:设置最大队列等待个数
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
测试三:将运行模式该为noi2
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
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"
得出结论:年轻代内存分配太小。整个堆内存分配太小
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"
5.Tomcat优化时,要不断的去测试适合当前环境的配置,优化点:1.Tomcat配置 2.JVM参数进行调优
connectionTimeout="20000"
redirectPort="8443" />
测试三:将运行模式该为noi2
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
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"
得出结论:年轻代内存分配太小。整个堆内存分配太小
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"
5.Tomcat优化时,要不断的去测试适合当前环境的配置,优化点:1.Tomcat配置 2.JVM参数进行调优