Tomcat生产环境的性能调优
Tomcat生产环境的性能调优
背景
java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出
工作时第一次遇见这个错误,很慌张因为客户那边网站无法访问了。出现的原因就是Tomcat配置的内存太小,访问量大的时候内存就溢出了。
天津项目考生查询会有短时间出现大量用户访问,这时就会有并发瓶颈。
Tomcat性能优化一:内存的优化
Tomcat默认可以使用的内存为128M o(╥﹏╥)o这点够干啥的!
在bin/catalina.bat或bin/catalina.sh 配置文件中进行。windows上,在catalina.bat中添加:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=256m -Djava.awt.headless=true
相关参数:
- JAVA_OPTS参数说明
- -server 启用jdk 的 server 版;
- -Xms java虚拟机初始化时的最小内存;
- -Xmx java虚拟机可使用的最大内存; #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
- -XX:PermSize 内存永久保留区域
- -XX:MaxPermSize 内存最大永久保留区域
- -XX:MaxNewSize 对自身堆栈的新的最大的分配;当tomcat内存不足时,调用此分配;
- -Djava.awt.headless=true 这个参数下面单独解释↓↓↓
 
 
- java.awt.headless 模式
- 什么是 java.awt.headless?Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。
- 何时使用和headless mode?Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。
- 如何使用和Headless mode?
 一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless mode下,就不要指望硬件帮忙了,你得自力更生,依靠系统的计算能力模拟出这些特性来:
 System.setProperty("java.awt.headless", "true");
- JAVA程序在浏览器中显示打印报表pdf文档时,报如下错误:
 JasperReports encountered this error : Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
 或者JasperReports encountered this error : sun/awt/X11GraphicsEnvironment
- 解决办法是
 运行时加上-Djava.awt.headless=true
 
Tomcat性能优化二:并发优化
1.调整连接器connector的并发处理能力,在Tomcat 配置文件 server.xml 中的
<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="100"
  maxSpareThreads="1000"
  minProcessors="100"
  maxProcessors="1000"
  enableLookups="false"
  URIEncoding="utf-8"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>
- 参数说明
- maxThreads 客户请求最大线程数
- minSpareThreads Tomcat初始化时创建的 socket 线程数
- maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
- enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
- redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
- acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
- connectionTimeout 连接超时
- minProcessors 服务器创建时的最小处理线程数
- URIEncoding URL统一编码
 
2.Tomcat缓存优化
<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="100"
  maxSpareThreads="1000"
  minProcessors="100"
  maxProcessors="1000"
  enableLookups="false"
  compression="on"
  compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  connectionTimeout="20000"
  URIEncoding="utf-8"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>
- 参数说明
- compression 打开压缩功能
- compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
- compressableMimeType 压缩类型
- connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间
 
以上仅是工作中遇到的优化的方案,对应单一服务来说不管怎么优化总是有性能瓶颈的。
-------------已经触及底线  感谢您的阅读-------------
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号