使用Jmeter对Tomcat进行压测(从jmeter安装到tomcat内存调优、参数调优、tomcat三种运行模式)
简介
Jmeter是Apache组织基于java开发的一款压力测试工具,可以用于对静态资源和动态资源的测试,对于运维来讲常用的测试场景有,tomcat并发、数据库并发、redis并发。
安装
因为jmeter是一款图形化工具,我们选择将jmeter安装在windows系统上。
1. 安装jdk
jmeter需要jdk8以上的进行支持
(1)下载jdk:https://www.oracle.com/technetwork/java/javase/downloads/index.html
(2)双击下载的jdk安装执行文件,可以选择默认安装目录,也可以自定义目录。
(3)配置jdk环境变量:“控制面板”–“系统和安全”–“系统”–“高级系统设置”–“环境变量”–“系统变量”
新建系统变量:
添加环境变量:JAVA_HOME
变量值为jdk安装的目录,可以浏览目录自己选择
添加环境变量:CLASSPATH
变量值:%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
添加Path变量值(如果没有Path则新建一个Path):
添加值:%JAVA_HOME%\bin 和 %JAVA_HOME%\jre\bin
设置完成,确定,保存设置。
(4)验证jdk安装成功:打开cmd,输入java -version,如果有输出java版本信息,则表示安装成功。
如果确认环境变量配置无误,java -version没有输出正确信息,需要关机重启,让系统重读配置信息
2. 安装Jmeter
(1)官网下载Jmeter压缩包:http://jmeter.apache.org/download_jmeter.cgi
(2)解压压缩包
(3)配置Jmeter环境变量(前边安装jdk已经演示过如何添加,这里只写明变量名和变量值)
变量名:JMETER_HOME
变量值:Jmeter解压的目录
添加变量名内容:CLASSPATH
变量值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
(4)运行Jmeter:Jmeter的安装目录,bin目录下,右键jmeter.bat以管理员权限运行
(5)设置中文显示:
如果中文显示乱码,打开bin目录下的jmeter.properties,找到sampleresult.default.encoding=ISO-8859-1,将编码方式改成UTF-8,再重启jmeter即可解决。
3. 安装tomcat
安装tomcat在本人之前的帖子中有详细演示,请参考。
压测
压测调优的流程大体上是首先开启jdk自带的监控工具Jconsole,然后开启Jmeter压力测试,通过Jconsole查看tomcat运行是否正常,服务器负载过高之后调整tocmat的配置参数,这样循环,最后找到最优的tomcat参数配置。
本帖我们暂用linux服务器的top命令来观察服务器的负载,感兴趣的可以使用Jconsole进行观察。
1.添加线程组:右键TestPlan
线程数:jmeter会使用多少个线程去进行压测
Ramp-Up时间:jmeter用多少时间去启动所设置的线程数
2.添加http请求:右键已添加的线程组
3.添加监听器:右键已添加的http请求
4.点击开始压测:首次创建,根据提示,将压测计划保存
5.tail命令查看tomcat的访问日志,是否一致压测的服务器已经开始访问
6.top命令查看服务器负载均衡:因为我的tomcat测试机器为2核cpu
负载过高的标准为:
(1)负载>cpu核数 * 0.8
(2)java进程占用cpu>cpu核数 * 0.8 * 100%
7.停掉jmeter,调整jmeter线程为100,继续开始压测
8.再次观察服务器负载:负载仍然在可接受范围内
9.继续增大jmeter线程数为600,这时的服务器java进程负载为150%-160%,已经达到服务器能接受的最大负载,如果负载继续增大,服务器处理响应的速度会很慢,严重影响网站的用户体验。
Tomcat参数调优
1.调整tomcat中jvm的内存大小:vim catalina.sh
JAVA_OPTS="-server -Xmx2048m -Xms3072m -XX:PermSize=512M -XX:MaxPermSize=512m"
添加一行配置,最小内存2048M,最大内存3072M,初始分配内存512M,最大初始分配内存512M
jvm的内存配置根据自己的服务的内存以及服务器是否跑有其他服务而配置,调整之后,继续加大jmeter的线程数,找到最优jvm内存配置即可。
2.调整tomcat配置参数:vim conf/server.xml
优化tomcat接收器Connector,接收器负责接收客户的访问以及向客户端发送响应的请求,所以这是tomcat优化的最重要部分。
修改后的配置:
<Connector port="8080"
protocol="HTTP/1.1"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
enableLookups="false"
acceptAccount="1000"
minProcessors="100"
maxProcessors="1000"
URIEncoding="utf-8"
connectionTimeout="20000"
redirectPort="8443" />
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
保存配置,重启tomcat,然后开启压测。
3.tomcat的三种运行模式
(1)BIO:阻塞式I/O操作,tomcat 7及以下默认情况下tomcat是以这种模式运行的。
特点:一个线程处理一个请求。
缺点:并发量多的时候,线程数较多,浪费资源。
配置方式:
protocol="HTTP/1.1"
(2)NIO:
特点:基于缓冲区、并能提供非阻塞I/O操作,利用 Java 的异步请求 IO 处理,可以通过少量的线程处理大量的请求。
配置方式:
protocol="org.apache.coyote.http11.Http11NioProtocol"
(3)APR:
特点:Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。从操作系统级别来解决异步的IO问题.
配置方式:这种运行模式需要单独安装,再次不过多演示,可自行查找。
理想状态下,APR>NIO>BIO
关于tomcat的性能优化还有很多方面,感兴趣的可以继续研究。
总体来讲,性能调优就是优化配置参数,然后进行压测,直到找到最大的优化参数。
本文地址:https://blog.csdn.net/qq_39213171/article/details/107183420
上一篇: js防抖和节流的深入讲解
下一篇: Java线程池的分析和使用详解