一、大杀器APR(可略)
APR是从操作系统级别来解决异步的IO问题,大幅度的提高性能. (http://apr.apache.org/).
APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心.能更好地和其它本地web技术集成,总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器.
在产品环境中,特别是直接使用Tomcat做WEB服务器的时候,应该使用Tomcat Native来提高其性能.如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来.
在局域网环境测,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大部分时间都用来页面传输.如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用apr是非常必要的.
以下是我找到的配置APR的一种方法:
Linux下,Tomcat启用APR须要三个组件:
apr
apr-util
tomcat-native.tar.gz(Tomcat自带,在bin文件夹下)
1、查看是否已经安装了apr和apr-util
[root@instance ~]# rpm -qa apr
apr-1.4.8-3.el7.x86_64
[root@instance ~]# rpm -qa apr-util
apr-util-1.5.2-6.el7.x86_64
2、查看是否有最新版的apr和apr-util
[root@instance ~]# yum list | grep apr
apr.x86_64 1.4.8-3.el7 @anaconda
apr-util.x86_64 1.5.2-6.el7 @anaconda
3、假设还没安装,用yum安装:
[root@instance ~]# yum install apr-devel apr apr-util
4、安装tomcat-native:
搜索tomcat-native安装包:
# yum list | grep tomcat-native
假设已经存在,直接安装:
[root@instance ~]# yum install tomcat-native
……
正在安装 : tomcat-native-1.1.30-1.el7.x86_64 1/1
验证中 : tomcat-native-1.1.30-1.el7.x86_64 1/1
已安装:
tomcat-native.x86_64 0:1.1.30-1.el7
完成!
查看是否成功安装:
[root@instance ~]# rpm -qa tomcat-native
tomcat-native-1.1.30-1.el7.x86_64
配置相关的全局变量:
[root@instance ~]# vi /etc/profile
加入:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
# source /etc/profile
5、重新启动Tomcat。看看能否够成功使用APR
假设一切正常:
APR启动:
[main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-18080"]
[main] org.apache.catalina.startup.Catalina.start Server startup in 13617 ms
二: tomcat参数调优:
1、tomcat IO优化:启动NIO模式
修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol
[root@instance ~]# cd /opt/lisam-shop-tomcat-8.5.46/conf
[root@instance ~]# vim server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
2、tomcat线程优化
1、线程池开启并使用:去掉注释,添加并调整参数:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="800" minSpareThreads="100" maxQueueSize="100" prestartminSpareThreads="true"/>
2、Connector节点中指定线程池,并调整参数
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxHttpHeaderSize="8192"
maxThreads="1000" //表示最多同时处理1000个连接
processorCache="1000"
acceptCount="1000" //当同时连接的人数达到maxThreads时,还可以排队,队列大小为1000.超过1000就不处理
minSpareThreads="100" //初始化100个连接
acceptorThreadCount="8"
URIEncoding="UTF-8"
enableLookups="false"
edirectPort="8443"
connectionTimeout="120000"
keepAliveTimeout="120000"
maxKeepAliveRequests="65535"
disableUploadTimeout="true"/>
三、Tomcat内存优化—Jvm调优相关
1、修改文件:bin/catalina.sh
[root@instance ~]# cd /opt/tomcat/apache-tomcat-8.5.46/bin
[root@instance ~]# vim catalina.sh
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewRatio=2 -XX:MaxTenuringThreshold=50 -XX:+DisableExplicitGC"
// -Xms : JVM初始化堆的大小
// -Xmx : JVM堆的最大值 实际参数大小根据服务器配置或者项目具体设置.
2、jps -v
输出虚拟机进程启动时的JVM参数
3、jstat -gc 8331 250 20
监控Java堆状况;每250毫秒查询一次进程8331垃圾收集状况,一共查询20次
4、jstat -gcutil 8331
与-gc基本相同,但主要关注已使用空间占总空间的百分比
5、jmap -dump:format=b,file=xx.bin 8331
生成一个正在运行java的dump快照文件
6、VisualVM性能分析
四、服务器压力测试
webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。
下载地址:http://soft.vpser.net/test/webbench/webbench-1.5.tar.gz
安装
[root@instance ~]# tar zxvf webbench-1.5.tar.gz
[root@instance ~]# cd webbench-1.5
[root@instance ~]# make && make install
会在当前目录生成webbench可执行文件,直接可以使用了
用法:webbench -c 并发数 -t 运行测试时间 URL,如下:
[root@instance ~]# webbench -c 600 -t 30 http://ip:8080/test.jsp
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://ip:8080/test.jsp/ 600 clients, running 30 sec.
Speed=528 pages/min, 99995 bytes/sec.
Requests: 264 susceed, 0 failed.