转载自 http://www.cnblogs.com/littlehb/archive/2013/04/02/2994785.htmlhtml
接上文。 java
你们都据说了在Apache Tomcat6 中支持了Java语言的特性 NIO( New I/O),无论你对NIO的技术是否熟悉,但你确定能想象的到NIO是一个好东西。的确,使用NIO在服务器端会有更好的性能,增强服务器端对并发处理的性能。 请注意:很抱歉,在tomcat6在默认的配置选项中是没有把NIO功能打开。因此不少正在使用Tomcat6的朋友们本觉得能快活的使用上NIO。apache
cd /usr/local/tomcat1/conf vi server.xml
1、设置Tomcat链接器池。 vim
在配置文件中添加了以下配置:centos
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />
修改前:
修改后:
2、Linux下修改JVM内存大小 tomcat
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.服务器
# OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-server -Xms512M -Xmx512M -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:PermSize=64M -XX:MaxPermSize=128m" cygwin=false
3、查看当前系统open files的默认值: 并发
ulimit -a less
没改过是1024 高并发
文件系统最大可打开文件数:cat /proc/sys/fs/file-max
个人机器是396399
修改文件系统最大打开文件数:echo 396399 >/proc/sys/fs/file-max
此值只能往小的设置不能超过限制值。
一、 在vi /etc/security/limits.conf文件中设置最大打开文件数 添加:
* soft nofile 65535
* hard nofile 65535
最后用重启ulimit -a再次查看,open files的值,若是改过来,则生效。
4、 安装Tomcat的Apr,提高性能
发现 Tomcat 能够用 Apache Portable Runtime 来提供更强性能,提高Web静态页面的处理能力,再也不须要专门的Web Server来处理静态页面了。apr 与 tomcat-native 提供更好的伸缩性、性能和集成到本地服务器技术。
若是没有apr技术,启动tomcat 时出现以下提示:
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/jdk1.6.0_06/jre/lib/i386/client:/usr/java/jdk1.6.0_06/jre/lib/i386:/usr/java/jdk1.6.0_06/
jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
按照官方说明须要:
APR library
OpenSSL libraries
openssl 能够用
yum install -y openssl-devel
apr仍是下载*.gz来安装。
(1)安装apr
mkdir /root/software cd /root/software wget http://mirror.bit.edu.cn/apache/apr/apr-1.5.0.tar.gz
tar zxvf apr-1.4.6.tar.gz cd apr-1.4.6 ./configure --prefix=/usr/local/apr make make install
安装apr的时候出现
./configure --prefix=/usr/local/apr
rm: cannot remove `libtoolT': No such file or directory
解决办法:
vim configure
在30126行 # $RM "$cfgfile" 前面加#注释掉:
在从新./configure
(2)安装apr-iconv
cd /root/software wget http://mirror.bit.edu.cn/apache/apr/apr-iconv-1.2.1.tar.gz tar -zxvf apr-iconv-1.2.1.tar.gz cd apr-iconv-1.2.1 ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr make make install
(3)安装apr-util
cd /root/software wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.5.3.tar.gz
tar zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.3 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv make make install
PS:我有经历两次不一样装apr,第一次是个人centos没有升级,一个升级后,升级前会有一些杂七杂八的error说不成,通常都是少包什么的,你给它yum update就好了,建议升级后再装,会比较正常一点点~~
(4)安装tomcat-native
//tomcat-native-1.1.29-src.tar.gz 这个我装的tomcat里边就本身带了,在bin目录下,若是大家没有找到,去网上下一个就好了。。具体哪下我也不知道⊙﹏⊙b汗,找apache的官网吧
cd /usr/local/tomcat1/bin tar zxvf tomcat-native.tar.gz cd tomcat-native-1.1.29-src/jni/native ./configure --with-apr=/usr/local/apr make make install
(5)设置 apr 的环境变量
cd /usr/local/tomcat1/bin vi catalina.sh
在文件的#!/bin/sh下添加以下内容:
#!/bin/sh LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH
这样的话,咱们只是把这个TOMCAT的APR添加上了,不破坏其它TOMCAT的配置信息。
启动 tomcat 后, 看日志:
bin/startup.sh
head logs/catalina.out
能够看到如下结果:
好了,能够运行了,但没有测试其性能提升多少。
在高并发下会让性能有明显提高。安装完成后重启便可生效。如使用默认protocal就是apr,但最好把将protocol修改为org.apache.coyote.http11.Http11AprProtocol,会更加明确。
cd /usr/local/tomcat1/conf vi server.xml
替换Connector内容以下:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" executor="tomcatThreadPool" compression="on" compressionMinSize="2048" maxThreads="30000" minSpareThreads="512" maxSpareThreads="2048" enableLookups="false" redirectPort="8443" acceptCount="35000" debug="0" connectionTimeout="40000" disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
下面咱们开始进行测试两种协议的压力状况:
centos安装ab
yum install httpd-tools
准备以后咱们就能够测试了
ab -kc 1000 -n 10000 http://localhost:8080/
这个指令会使用1000个并发,进行链接10000次。结果以下:
NIO最快的一次:
APR的最快一次:
差距是50%左右,强烈推荐使用APR协议!!!不要使用NIO协议+APR库支持的行为!!!!!!!!
若是安装不上APR或者真的没有办法启用APR,那么用以下的备用方案:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" executor="tomcatThreadPool" compression="on" compressionMinSize="2048" maxThreads="30000" minSpareThreads="512" maxSpareThreads="2048" enableLookups="false" redirectPort="8443" acceptCount="35000" debug="0" connectionTimeout="40000" disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
按照做者所说apr安装以前 我就安装了ad测试工具测试的connection Times max最小值为85,配置完apr后测试最小值为82。没有什么差距。