1、内存优化:
优化内存,主要是在bin/catalina.bat或bin/catalina.sh
配置文件中进行。linux上,在catalina.sh中添加: JAVA_OPTS="-server -Xms1G
-Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8
-XX:PermSize=128M -XX:MaxPermSize=256M"
其中:
-server:启用JDK的server版本。-Xms:JVM初始化时的最小heap容量。
-Xmx:JVM可使用的最大heap容量。-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能不稳定。
-XX:PermSize:设置非heap初始值,默认是物理内存的1/64。
-XX:MaxPermSize:Perm(俗称方法区)占整个heap的最大值,也称内存最大永久保留区域。
2、连接数优化:
优化连接数,主要是在conf/server.xml配置文件中进行修改。
2.1、优化线程数
找到Connectorport=”8080” protocol=”HTTP/1.1”,增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads)。
<Connectorport="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" acceptCount="500" maxThreads="400" />
其中:
maxThreads:tomcat可用于请求处理的最大线程数,默认是200。
minSpareThreads:tomcat初始线程数,即最小空闲线程数。
maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭。
acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认100。
2.2、使用线程池
在server.xml中增加executor节点,然后配置connector的executor属性,如下:
<Executorname="tomcatThreadPool" namePrefix="req-exec-" maxThreads="1000" minSpareThreads="50" maxIdleTime="60000"/>
<Connectorport="8080" protocol="HTTP/1.1" executor="tomcatThreadPool"/>
其中:
namePrefix:线程池中线程的命名前缀。
maxThreads:线程池的最大线程数。
minSpareThreads:线程池的最小空闲线程数。
maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭。 •
threadPriority:线程优先级。
注:当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too
many open files错误。可使用下面步骤检查:
ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号。
lsof -p 端口号 | wc -l 查看当前进程id号的文件操作数。
ulimit -a 查看每个用户允许打开的最大文件数。
3、Tomcat Connector三种运行模式(BIO, NIO, APR)
3.1、三种模式比较:
1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式。
2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):
<Connectorport="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/>
3)APR(Apache Portable Runtime):从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
3.2、apr模式
安装apr以及tomcat-native。
yum -y install apr apr-devel
cd /opt/local/tomcat/bin/;
tar xzfv tomcat-native.tar.gz;
cd tomcat-native-1.1.32-src/jni/native
./configure –with-apr=/usr/bin/apr-1-config;
make && make install;
注意最新版本的tomcat自带tomcat-native.war.gz,不过其版本相对于yum安装的apr过高,configure的时候会报错。
解决方案:
yum remove apr apr-devel
, –y 卸载yum安装的apr和apr-devel;
下载最新版本的apr源码包,编译安装,或者下载低版本的tomcat-native编译安装;
安装成功后还需要对tomcat设置环境变量,方法是在catalina.sh文件中增加1行:
CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
apr下载地址:http://apr.apache.org/download.cgi
tomcat-native下载地址:http://tomcat.apache.org/download-native.cgi
修改8080端对应的conf/server.xml protocol=”org.apache.coyote.http11.Http11AprProtocol”
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout=”20000″ enableLookups="false" redirectPort="8443" URIEncoding="UTF-8" />
PS:启动以后查看日志 显示如下表示开启 apr 模式 x xx,
xxxx xx:xx:xx PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler [“http-apr-8081”]