优化tomcat6配置

来源:互联网 发布:ubuntu安装gfirefly 编辑:程序博客网 时间:2024/05/01 03:30

为了提高网站的访问性能,我们往往会在服务器端选择合适的部署环境。最简单的就是一个tomcat了,但是在高并发的情况下,非常
容易当机。因为tomcat配置的不优化。我最早也没有注意这些细节,因为我知道一个项目的性能不是通过搭建环境体现的,而是算法的高效,代码实现的合理性,以及数据库的合理使用,优化技术的使用等等。不过通过优化部署环境应该说是最直接的一种方案了。目前我知道的一种tomcat优化方案是使用 tomcat线程池。只需要在server.xml中改改配置就可以了。核心配置代码:
Java代码  收藏代码

   1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"   
   2.        maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>  

 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>


 
(2).....................(环境Linux)
进入tomcat目录,启动:

./catalina.sh run

看着终端的屏幕开是刷,显示出清晰的tomcat6的启动日志仅仅的压力测试直接500,在未做其余任何调整的情况下通过,其中表单提交过程耗是在12秒左右,稍微慢了点,王老五反应数据库链接数突破到19后停滞,那么继续优化

2、调整platform数据源的线程设置

假设发布目录为Webroot,那么在WebRoot/META-INF/下建立context.xml文件,调整数据源配置

(注:tomcat6才能支持发布目录数据源配置,以前的版本改文件路径在tomcat安装路径下的conf目录中)

context.xml文件内容如下:

Java代码  收藏代码

   1. <?xml version=”1.0″ encoding=”UTF-8″?>  
   2. <Context path= “/WebRoot ” privileged= “true” reloadable=”false”>  
   3. <Resource name=”sysDataSource” auth=”Container”  
   4. type=”javax.sql.DataSource” maxActive=”5000″ maxIdle=”300″ maxWait=”60000″  
   5. logAbandoned=”true” username=”yfjz” password=”password”  
   6. driverClassName=”oracle.jdbc.driver.OracleDriver”  
   7. url=”jdbc:oracle:thin:@10.10.10.XX:1521:al32″ />  
   8. <Resource name=”yfjzDataSource” auth=”Container”  
   9. type=”javax.sql.DataSource” maxActive=”4000″ maxIdle=”200″ maxWait=”60000″  
  10. logAbandoned=”true” username=”yfjz” password=”password”  
  11. driverClassName=”oracle.jdbc.driver.OracleDriver”  
  12. url=”jdbc:oracle:thin:@10.10.10.XX:1521:al32″ />  

<?xml version=”1.0″ encoding=”UTF-8″?>
<Context path= “/WebRoot ” privileged= “true” reloadable=”false”>
<Resource name=”sysDataSource” auth=”Container”
type=”javax.sql.DataSource” maxActive=”5000″ maxIdle=”300″ maxWait=”60000″
logAbandoned=”true” username=”yfjz” password=”password”
driverClassName=”oracle.jdbc.driver.OracleDriver”
url=”jdbc:oracle:thin:@10.10.10.XX:1521:al32″ />
<Resource name=”yfjzDataSource” auth=”Container”
type=”javax.sql.DataSource” maxActive=”4000″ maxIdle=”200″ maxWait=”60000″
logAbandoned=”true” username=”yfjz” password=”password”
driverClassName=”oracle.jdbc.driver.OracleDriver”
url=”jdbc:oracle:thin:@10.10.10.XX:1521:al32″ />


</Context>
(注:再次测试300户时,数据链接监控发现线程上到199,线程已经解禁了)

3、调增tomcat6响应池:

查找tomcat6安装目录下conf目录中的server.xml文件,进行编辑

屏蔽tomcat默认Connector:

Java代码  收藏代码

   1. <!–  
   2.   
   3. <Connector port=”8080″ protocol=”HTTP/1.1″  
   4. connectionTimeout=”20000″  
   5. redirectPort=”8443″ />  
   6.   
   7. –>  

<!–

<Connector port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />

–>



创建高线程的Connector:

Java代码  收藏代码

   1. <Connector port=”8080″ redirectPort=”8443″  
   2. maxHttpHeaderSize=”8192″ useBodyEncodingForURI=”true”  
   3. minProcessors=”100″ maxProcessors=”5000″  
   4. maxThreads=”5000″ minSpareThreads=”1000″ maxSpareThreads=”4000″  
   5. enableLookups=”false” acceptCount=”3500″  
   6. compression=”on” compressionMinSize=”2048″  
   7. compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”  
   8. connectionTimeout=”60000″ disableUploadTimeout=”true” debug=”0″ URIEncoding=”UTF-8″/>  

<Connector port=”8080″ redirectPort=”8443″
maxHttpHeaderSize=”8192″ useBodyEncodingForURI=”true”
minProcessors=”100″ maxProcessors=”5000″
maxThreads=”5000″ minSpareThreads=”1000″ maxSpareThreads=”4000″
enableLookups=”false” acceptCount=”3500″
compression=”on” compressionMinSize=”2048″
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
connectionTimeout=”60000″ disableUploadTimeout=”true” debug=”0″ URIEncoding=”UTF-8″/>


(注:加入响应线程数控制,加入压缩传递模式,调整超时设置,屏蔽调试模式)

4、增加tomcat6启动内存:

查找tomcat6安装目录下bin目录中catalina.sh文件,在开始增加如下:

Java代码  收藏代码

   1. JAVA_OPTS=” -Xms1400m -Xmx1400m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true ”  

JAVA_OPTS=” -Xms1400m -Xmx1400m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true ”




5、增加oracle响应线程数:

王老五将oracle数据线程响应定为1000,这是测试用的,同时监控oracle链接资源

(想知道这个怎么设置的,认识王老五的就找他聊聊,不认识的就网上找找吧,呵呵)

6、开始压测1000户

晶晶开始测试后,确发现有十来户一直处于等待状态,R61本本cpu资源从96%降到10%以下,硬盘灯狂闪,Desktop系统操作响应减缓使用硬盘资源检查命令发现,硬盘使用资源为100%,说明硬盘满了,系统在寻找缓存操作,硬盘和内存疯狂交互这真是“一波刚平一波起,平湖落石浪千层……”


第五章 查硬盘日志累计,斩输出平台生春

通过查找,系统硬盘资源撑爆的原因是tomcat日志和platform日志无限追加的原因,解决办法如下:

1、调整platform日志log4j.properties

将首行的“log4j.rootLogger = DEBUG, A1, A2”改为“log4j.rootLogger = INFO, A1”

(注:很简单吧:-)

2、调整tomcat6的日志输出

将下面内容注释掉:

handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4admin.org.apache.juli.FileHandler, 5host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
(注:行首加#号就行)

3、晶晶继续压测,结果定在2100多户左右

尾声:

从整个过程来看,PlatForm在抗压性上表现突出,自始至终未出现崩盘情况,所有失败用户的错误提示都为“time-out”,只是登录响应时间占总流程比重稍高,仍续继续调整;该测试可以说改变了我对tomcat的定义,在各项优化做足的情况下,tomcat抗亚能力优秀, 也从未崩盘,只是单线程响应是一直诟病的,反映在当集群用户出现是表单响应时间便长,致使我不得不增大了超时时间(原来定在20秒,后来调整到1分钟); 系统容载量是一个综合性的过程,在整个压测环节中每一步都十分重要,不能仅仅依靠某一个环节的优化就可以安了,在2100户时,数据库链接超过800线, 系统cpu使用量高达96%,硬盘资源几乎不耗费,这说明2G的内存在处理足够多的事物。”

原创粉丝点击