内存相关,避免内存溢出,又要尽可能利用内存资源
linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入
8G为例:
JAVA_OPTS="-server -Xms4G -Xmx4G -XX:MaxNewSize=2G -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:PermSize=1G
-XX:MaxPermSize=1G -Djava.awt.headless=true -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
-server 启用jdk 的 server 版;
-Xms java虚拟机初始化时的最小内存,最好接近于Xmx,避免过多内存交换
-Xmx java虚拟机可使用的最大内存; 可用内存的80%
-Xss
每个线程的栈的大小,减少这个值可以生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限制生成。如果程序
没有报StackOverFlow,可以设置成128K。
-XX:PermSize 内存永久保留区域
-XX:MaxPermSize 内存最大永久保留区域
windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入
set JAVA_OPTS=-Xms512m -Xmx512m -Xss1024k -XX:MaxNewSize=256M -XX:MaxPermSize=1024M 参数同linux
连接并发相关:
配置文件conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
maxHttpHeaderSize="8192" 客户端Http请求、响应的Header的最大限制
maxThreads="1000" 客户请求最大线程数
minSpareThreads="100" Tomcat初始化时创建的 socket 线程数
maxSpareThreads="1000" Tomcat连接器的最大空闲 socket 线程数
minProcessors="100" 最小连接线程数,用于提高系统处理性能,默认值为 10
maxProcessors="1000" 最大连接线程数,即:并发处理的最大请求数,默认值为 75
enableLookups="false" 禁用DNS查询
compression="on" 打开压缩功能
compressionMinSize="2048" 启用压缩的输出内容大小,默认为2KB
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
压缩类型
connectionTimeout="20000"
网络连接超时,0 表示永不超时,这样设置有隐患的。通常可设置为30000 毫秒
URIEncoding="utf-8" URL统一编码
acceptCount="1000" 允许的最大连接数,应等于 maxProcessors ,默认值为 100
redirectPort="8443" 重定向端口,默认即可
disableUploadTimeout="true"/> 关闭数据上载的超时时间,默认为false
其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数,webserver允许的
最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右
运行模式:
1)bio 默认的模式,性能非常低下,没有经过任何优化处理和支持.
2)nio 利用java的异步io护理技术,no blocking IO技术.
想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" /> 重启后,就可以生效。
3)apr 安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
必须要安装apr和native,直接启动就支持apr。下面的修改纯属多余,仅供大家扩充知识,但仍然需要安装apr和native
如nio修改模式,修改protocol为org.apache.coyote.http11.Http11AprProtocol
Apr插件提高Tomcat性能(linux)
在产品环境中,特别是直接使用Tomcat做WEB服务器的时候,应该使用Tomcat Native来提高其性能
要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。
如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,从原来的300可能
会马上下降到只有几十,新的请求会毫无阻塞的进来。
在局域网环境测,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大
部分时间都用来页面传输。如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用apr是非常必要的。
(1)安装APR tomcat-native
apr-1.3.8.tar.gz 安装在/usr/local/apr
#tar zxvf apr-1.3.8.tar.gz
#cd apr-1.3.8
#./configure;make;make install
apr-util-1.3.9.tar.gz 安装在/usr/local/apr/lib
#tar zxvf apr-util-1.3.9.tar.gz
#cd apr-util-1.3.9
#./configure --with-apr=/usr/local/apr ----with-java-home=JDK;make;make install
#cd apache-tomcat-6.0.20/bin
#tar zxvf tomcat-native.tar.gz
#cd tomcat-native/jni/native
#./configure --with-apr=/usr/local/apr;make;make install
(2)设置 Tomcat 整合 APR
修改 tomcat 的启动 shell (startup.sh),在该文件中加入启动参数:
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib" 。
(3)判断安装成功:
如果看到下面的启动日志,表示成功。
INFO: Loaded APR based Apache Tomcat Native library
server.xml :
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="3000" minSpareThreads="200"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000000"
redirectPort="8443" URIEncoding="UTF-8"
enableLookups="false"
useURIValidationHack="false"
disableUploadTimeout="false"
maxHttpHeaderSize="65536"
maxPostSize="52428800"/>