Tomcat的配置和优化
2017-09-23 本文已影响51人
木巽
刚入职新公司的Web服务器总是故障,需要解决服务器的稳定性来证明自己的能力。
首先查看Tomcat 7的日志文件中有OutOfMemoryError: PermGen space,即永久代(持久栈)内存溢出。这个问题首先看TOMCAT的启动参数,主要是以下两个:
-Xmx:java heap最大值,使用的最大内存
这里我设置为内存减512M
-XX:MaxPermSize:设定最大内存的永久保存区域
这里我设置为2048M(2G,一般不超过最大内存的二分之一)
修改后重启tomcat,第二天又内存溢出了,肯定是代码有问题。查找代码后发现有4处代码使用了数据库连接之后,没有关闭,导致内存泄露。修复之代码之后,然后发布。
没过几天又出问题了,对虚拟机内存分析发现很多阻塞的线程,于是继续优化Tomcat的server.xml文件。网上流传的文章,有些会误导的,参考了Tomcat官方文档才得到正确的配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="10000"
keepAliveTimeout="60000"
acceptorThreadCount="4" maxCookieCount="600"
maxThreads="600" maxConnections="600"
minSpareThreads="100"
acceptCount="200"
redirectPort="8443" />
然后Tomcat就一直很稳定了。connectionTimeout连接超时为10秒,acceptorThreadCount接受处理线程数为4(CPU的内核数),maxThreads最大线程数、maxCookieCount最大Cookie数、maxConnections最大连接数这三个值我都设置相同(最大连接数可以设置比线程数大一点),minSpareThreads最小空闲线程(即至少有多少个执行线程处理等待状态,随时可以处理任务),acceptCount(这个是当超出最大线程之后的等待任务数量,之前网上有人说是线程总数量要大于等于最大线程数,我设置过大,导致产生了很多无用的等等线程,默认值是100,其实也可以不用设置)