因为客户服务器特殊的环境问题,只能使用windows2008r2服务器,然而配置过后,网站的高访问量很快就出现了各种问题,以下是解决的问题汇总。
服务器环境:windows2008R2+jdk8.0+tomcat8.0.21+sqlserver2008r2(以上软件环境均是64位)
1、首先建议安装jdk8.0(64位)以能获取较高的JVM内存设置,不然网站访问并发过高,内存很快就会出现不足,也就是常说的java heap space不足了。下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
记得一定要选择:jdk-8u45-windows-x64.exejdk-8u45-windows-x64.exejdk-8u45-windows-x64.exe
2、安装64位的tomcat8.0,目前最新版本是apache-tomcat-8.0.21,下载地址:http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.21/bin/apache-tomcat-8.0.21-windows-x64.zip
3、修改连接器协议,默认是HTTP/1.1,该默认设置不能支持过高的并发量,不然会出现io错误。方法是修改conf/server.xml将<Connector port="8080" protocol="HTTP/1.1"修改为<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol"
4、优化jar包,如果一个jar文件出现在多个WEB应用中的话,可以将该jar文件统一放到一个目录下,以 避免被tomcat 多次加载,耗用内存占用。方法是:
修改:/conf/catalina.properties文件
将:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"后面增加:"${catalina.home}/share/lib/*.jar"
然后将共用的jar文件放到tomcat下share目录里的lib文件夹里即可。
5、tomcat8默认会缓存图片资源,当并发过高时,会提示warn信息: WARNING [http-nio-80-exec-43] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at.....,这个本身没有什么问题,只是不断在日志中写入信息,日志文件不断增加,感觉不好,干脆设置不缓存,方法是:
修改META-INF下的context.xml文件,在Context中增加一行:<Resources cachingAllowed="false"></Resources>
6、设置jvm较大内存,编辑bin/catalina.bat,找到以下代码段:rem Guess CATALINA_HOME if not defined,在其上面增加代码:
set JAVA_OPTS=-Xms512m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=256m
这里设置的Xmx为4G内存,如果安装的不是64位的JDK,那么在设置最大内存的时候,就会提示不支持(好像最多能设置到1G多点,要知道服务器内存是64G啊,!!!)。所以第一步为什么安装64位的操作系统了。
7、设置tomcat最大并发数,方法:修改conf/server.xml,在Connector下增加以下代码:maxThreads="1000" minSpareThreads="100" maxSpareThreads="300" acceptCount="100"
以下是我的配置:
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" maxThreads="1000" minSpareThreads="100" maxSpareThreads="300" acceptCount="100" redirectPort="8443" URIEncoding="GBK" useBodyEncodingForURI="true" />
因为大多数时候JSP程序都是部署在linux下,没有想到windows下会有这么多问题,以上是经过测试后的时候,网站在高访问量下没有再出问题。另外经过测试在windows服务器下,使用apache+tomcat集成的方法也不好。对于并发的连接数支持还不如纯tomcat。