Tomcat服务器优化

Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的问题常常会在开发中遇到,面试中也有会问到的时候,因此我决定要记一下。javascript

首先,优化tomcat我给出三个方向:css

a) 内存优化:主要是对Tomcat启动参数进行优化,咱们能够在Tomcat启动脚本中修改它的最大内存数等等。html

b) 线程数优化:Tomcat的并发链接参数,主要在Tomcat配置文件中server.xml中配置,好比修改最小空闲链接线程数,用于提升系统处理性能等等。java

c) 优化缓存:打开压缩功能,修改参数,好比压缩的输出内容大小默认为2KB,能够适当的修改。面试

针对第一点,咱们须要了解如下6个参数:数据库

1:-Xms 堆空间初始大小缓存

2:-Xmx 堆空间最大数值tomcat

3:-Xmn 年轻代的堆大小安全

4:-Xss   每一个线程堆大小服务器

5:-XX: PermSize 内存永久保留区域 

6:-XX:MaxPermSize 内存最大永久保留区域

这几个参数都是在Tomcat 启动脚本(bin/catalina.bat)中进行配置的,通常开发环境配置时咱们就会预先配置好。只要把如下代码加入文件中,而且重启Tomcat便可。

JAVA_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=512m"(具体数值按公司服务器大小以及实际自行配置)

第二第三点合在一块儿优化也是修改Tomcat的配置文件server.xml。初学者通常使用这个文件都是为了修改端口号。

咱们打开server.xml找到Connector 标签项,能够看到默认配置以下:

1 <Connector port="8080" protocol="HTTP/1.1"  
2  connectionTimeout="20000"  
3  redirectPort="8443" /> 

其中port表明服务端口;protocol表明协议类型;connectionTimeout表明链接超时时间,单位为毫秒;redirectPort表明安全通讯(https)转发端口,通常配置成443。

咱们须要调整链接器connector的并发处理能力,好比这样:

 1 <Connector port="8080"
 2   protocol="HTTP/1.1"
 3   maxHttpHeaderSize="8192"
 4   maxThreads="1000"
 5   minSpareThreads="100"
 6   maxSpareThreads="1000"
 7   minProcessors="100"
 8   maxProcessors="1000"
 9   enableLookups="false"
10   compression="on"
11   compressionMinSize="2048"
12   compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
13   connectionTimeout="20000"
14   URIEncoding="utf-8"
15   acceptCount="1000"
16   redirectPort="8443"
17   disableUploadTimeout="true"/>

参数说明:

  maxThreads 客户请求最大线程数 
  minSpareThreads Tomcat初始化时建立的 socket 线程数 
  maxSpareThreads Tomcat链接器的最大空闲 socket 线程数 
  enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名 
  redirectPort 在须要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口 
  acceptAccount 监听端口队列最大数,满了以后客户请求会被拒绝(不能小于maxSpareThreads ) 
  minProcessors 服务器建立时的最小处理线程数 
  maxProcessors 服务器同时最大处理线程数 
  URIEncoding URL统一编码
  compression 打开压缩功能 
  compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB 
  compressableMimeType 压缩类型 
  connectionTimeout 定义创建客户链接超时的时间. 若是为 -1, 表示不限制创建客户链接的时间

推荐一篇好文章:http://blog.csdn.net/kally_wang/article/details/74989885  目前我仍是有点看不大明白的,还得学习下,其中提到了线程池,我在想这和数据库链接池是应该有殊途同归之处。

相关文章
相关标签/搜索