Linux下Tomcat配置优化及服务器压力测试

一: Tomcat内存优化

启动时告诉JVM我要一块大内存(调优内存是最直接的方式)
Windows 下的catalina.bat
Linux 下的catalina.sh 如:

JAVA_OPTS='-Xms256m -Xmx512m'

-Xms JVM初始化堆的大小
-Xmx JVM堆的最大值 实际参数大小根据服务器配置或者项目具体设置.

二:Tomcat 线程优化

在server.xml中 如:

<Connector port="8080" 
    protocol="HTTP/1.1" 
    maxThreads="600" 
    minSpareThreads="100"
    maxSpareThreads="500" 
    acceptCount="700"
    connectionTimeout="20000"  />

maxThreads=”X” 表示最多同时处理X个连接
minSpareThreads=”X” 初始化X个连接
maxSpareThreads=”X” 表示如果最多可以有X个线程,一旦超过X个,则会关闭不在需要的线程
acceptCount=”X” 当同时连接的人数达到maxThreads时,还可以排队,队列大小为X.超过X就不处理

三:Tomcat IO优化
  1. 同步阻塞IO(JAVA BIO) 同步并阻塞,服务器实现模式为一个连接一个线程(one connection one thread 想想都觉得恐怖,线程可是非常宝贵的资源),当然可以通过线程池机制改善.
  2. JAVA NIO:又分为同步非阻塞IO,异步阻塞IO 与BIO最大的区别one request one thread.可以复用同一个线程处理多个connection(多路复用).
  3. 异步非阻塞IO(Java NIO2又叫AIO) 主要与NIO的区别主要是操作系统的底层区别.可以做个比喻:比作快递,NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;AIO就是快递员送货上门了(不用关注快递进度)。
    BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解.
    NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持.
    AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持.
    在server.xml中实现对Tomcat的IO切换:
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" 
    connectionTimeout="20000" 
    URIEncoding="UTF-8" 
    useBodyEncodingForURI="true" 
    enableLookups="false" 
    redirectPort="8443" />
四:大杀器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

# rpm -qa apr
apr-1.4.8-3.el7.x86_64
# rpm -qa apr-util
apr-util-1.5.2-6.el7.x86_64

2、查看是否有最新版的apr和apr-util

# 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安装:

# yum install apr-devel apr apr-util

4、安装tomcat-native:
搜索tomcat-native安装包:

# yum list | grep tomcat-native

假设已经存在,直接安装:

# 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                                                                                                                                                        
完成!

查看是否成功安装:

# rpm -qa tomcat-native
tomcat-native-1.1.30-1.el7.x86_64

配置相关的全局变量:

# 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内存(jvm内存)
我这里tomcat是放在/home目录下

vi /home/tomcat7/bin/catalina.sh下添加:
JAVA_OPTS=-server -Xms1024M -Xmx1024M -XX:PermSize=512M -XX:MaxNewSize=512M -XX:MaxPermSize=512M’

修改Tomcat/conf下的server.xml

<Connector port="8080"
            protocol="org.apache.coyote.http11.Http11AprProtocol"
            connectionTimeout="20000"
            redirectPort="8443"
            maxThreads="1000"
            minSpareThreads="100"
            acceptCount="1000"
            maxHttpHeaderSize="65536"
            debug="0"
            disableUploadTimeout="true"
            useBodyEncodingForURI="true"
            enableLookups="false"
            URIEncoding="UTF-8"/>

五、服务器压力测试

webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。
下载地址:http://soft.vpser.net/test/webbench/webbench-1.5.tar.gz
安装

#tar zxvf webbench-1.5.tar.gz
#cd webbench-1.5
#make && make install

会在当前目录生成webbench可执行文件,直接可以使用了
用法:webbench -c 并发数 -t 运行测试时间 URL,如下:

# 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.

最近在学习部署配置服务器,这些都是从网上收集整理的v — v

猜你喜欢

转载自blog.csdn.net/kunsue/article/details/81304266