zoukankan      html  css  js  c++  java
  • 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, 表示不限制建立客户连接的时间

    以上仅是工作中遇到的优化的方案,对应单一服务来说不管怎么优化总是有性能瓶颈的。

    -------------已经触及底线 感谢您的阅读-------------
  • 相关阅读:
    python网络编程学习笔记(3):socket网络服务器
    Python编码爬坑指南
    ROT13 维基百科,自由的百科全书
    ZODB + Traversal Wiki Tutorial¶
    ZODB programming guide¶
    利用新浪api获取ip归属地 QtSharp 博客园
    用python做了个桌球瞄准器
    Python运维工具介绍1–fabric
    python httplib2 使用代理出错
    第四回 基类中的修饰符,应该根据你对架构的理解去定义它们,没有绝对的
  • 原文地址:https://www.cnblogs.com/cnsyear/p/12790932.html
Copyright © 2011-2022 走看看