zoukankan      html  css  js  c++  java
  • Tomcat服务器优化

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

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

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

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

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

    针对第一点,我们需要了解以下6个参数:

    1:-Xms 堆空间初始大小

    2:-Xmx 堆空间最大数值

    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  目前我还是有点看不大明白的,还得学习下,其中提到了线程池,我在想这和数据库连接池是应该有异曲同工之处。

  • 相关阅读:
    中国百年校服史:青春飞扬的几代人[转]
    关于五笔和拼音输入法的最本质区别
    Windows Mobile device 开发详解..
    生成目录树
    安装CE 6.0和VS2005出现的两个问题解决
    在c与c++下struct的区别,已经在c++下struct与class的区别。
    一招克死所有病毒!上网不用防火墙.不看后悔哟
    VC解析XML文件
    pythonday1笔记
    an error occurred while completing process java.lang.reflect.InvocationTargetEx
  • 原文地址:https://www.cnblogs.com/timePasser-leoli/p/8526039.html
Copyright © 2011-2022 走看看