tomcat服务nio 支持多大并发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat服务nio 支持多大并发相关的知识,希望对你有一定的参考价值。

参考技术A   Tomcat 默认是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大,理论是想多大就多大。
  具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
  当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。
  并发和同时在线用户数是不一样的,因为不同的用户操作是有间隔的。如果逻辑复杂,请求执行时间过长,就会占用过多的性能,导致同时在线用户数下降,但是对并发没有影响。
  操作系统对于进程中的线程数有一定的限制:
  Windows 每个进程中的线程数不允许超过 2000;
  Linux 每个进程中的线程数不允许超过 1000;

  另外,在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。

Centos6.5优化Tomcat7

CentOS-6.5优化Tomcat7

时间:2015-01-07 23:57来源:linux.it.net.cn 作者:IT
 

大家都听说了在Apache Tomcat6 中支持了Java语言的特性 NIO( New I/O),不管你对NIO的技术是否熟悉,但你肯定能想象的到NIO是一个好东西。的确,使用NIO在服务器端会有更好的性能,加强服务器端对并发处理的性能。  请注意:很抱歉,在tomcat6在默认的配置选项中是没有把NIO功能打开。所以很多正在使用Tomcat6的朋友们本以为能快活的使用上NIO。

cd /usr/local/tomcat1/conf
vi server.xml

一、设置Tomcat连接器池。

黄海在配置文件中添加了如下配置:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />

 二、Linux下修改JVM内存大小

要添加在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

三、查看当前系统open files的默认值:

ulimit -a

没改过是1024

文件系统最大可打开文件数:cat /proc/sys/fs/file-max  

我的机器是396399

修改文件系统最大打开文件数:echo 396399 >/proc/sys/fs/file-max

 

此值只能往小的设置不能超过限制值。

1、     在vi /etc/security/limits.conf文件中设置最大打开文件数 添加:

*      soft    nofile         65535        

*      hard    nofile        65535

最后用重启ulimit -a再次查看,open files的值,如果改过来,则生效。

 

四、  安装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.4.6.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

在30048行 #    $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.4.1.tar.gz
tar zxvf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1 
./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.27-src.tar.gz  这个我装的tomcat里边就自己带了,在bin目录下,如果你们没有找到,去网上下一个就行了。。具体哪下我也不知道⊙﹏⊙b汗,找apache的官网吧

cd /usr/local/tomcat1/bin    
tar zxvf tomcat-native.tar.gz  
cd tomcat-native-1.1.27-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" />
 


(责任编辑:IT)



以上是关于tomcat服务nio 支持多大并发的主要内容,如果未能解决你的问题,请参考以下文章

nginx+tomcat+redis 支持多大并发

[转]TOMCAT 可以稳定支持的最大并发用户数

tomcat 最多支持并发多少用户?

用tomcat做的服务器 最大能做多大的应用?

java tomcat 单机支持多少并发

ruoyi能支持多大并发