tomcat专题TomcatJava web

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,其实也可以不用设置)

上一篇下一篇

猜你喜欢

热点阅读