【广州校区】+【原创】 + tomcat优化

Java 已结 1 164
seo培训班
seo培训班 2021-04-30 09:15
悬赏:8
相关标签:
1条回答
  •  网络营销的特点
    网络营销的特点 (最佳回答者)
    2021-04-30 09:41

    本帖最后由 leeao 于 2019-7-18 16:57 编辑

    第一: 内存方面优化 Windows环境下,是tomcat解压版(执行startup.bat启动tomcat) ,解决办法:


    修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:

    [AppleScript] 纯文本查看 复制代码
      set JAVA_OPTS=-Xms512m -Xmx512m  -XX:PermSize=128M -XX:MaxNewSize=256m  -XX:MaxPermSize=512m

    备注:一定加在catalina.bat最前面。

    Windows环境下,是tomcat安装版(利用windows的系统服务启动tomcat),解决办法:

    修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun
    2.0\Tomcat6\Parameters\JavaOptions

    原值为:
    [AppleScript] 纯文本查看 复制代码
      -Dcatalina.home=E:\Tomcat 6.0    -Dcatalina.base=E:\Tomcat 6.0    -Djava.endorsed.dirs=E:\Tomcat 6.0\common\endorsed    -Djava.io.tmpdir=E:\Tomcat 6.0\temp    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager      -Djava.util.logging.config.file=E:\Tomcat  6.0\conf\logging.properties  

    加入:
    [AppleScript] 纯文本查看 复制代码
      Xms512m -Xmx512m -XX:PermSize=128M  -XX:MaxNewSize=256m -XX:MaxPermSize=512m


    重起tomcat服务,设置生效。


    Linux环境下, ,解决办法:
    修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头增加如下设置:JAVA_OPTS=’-Xms256m
    -Xmx512m’

    各参数详解:
    [Bash shell] 纯文本查看 复制代码
    -Xms:设置JVM初始内存大小(默认是物理内存的1/64)  -Xmx:设置JVM可以使用的最大内存(默认是物理内存的1/4,建议:物理内存80%)  -Xmn:设置JVM最小内存(128-256m就够了,一般不设置)


    默认空余堆内存小于
    40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、
    -Xmx相等以避免在每次GC 后调整堆的大小。

    在较大型的应用项目中,默认的内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError:
    Java heap space”,从而导致客户端显示500错误。

    -XX:PermSize :为JVM启动时Perm的内存大小
    -XX:MaxPermSize :为最大可占用的Perm内存大小(默认为32M)
    -XX:MaxNewSize,默认为16M
    PermGen space的全称是Permanent Generation
    space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen
    space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage
    Collection)不会在主程序运行期对PermGen
    space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现“java.lang.OutOfMemoryError:
    PermGen space”错误。

    对于WEB项目,jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小,为了避免调整),你可以使用更多的参数配置。如果你的WEB
    APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小,那么就会产生此错误信息了。

    其它参数:
    -XX:NewSize :默认为2M,此值设大可调大新对象区,减少Full
    GC次数
    -XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)
    -XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空
    间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)
    -XX:userParNewGC 可用来设置并行收集【多CPU】
    -XX:ParallelGCThreads 可用来增加并行度【多CPU】
    -XXUseParallelGC 设置后可以使用并行清除收集器【多CPU】


    2.修改tomcat让其支持NIO

    修改前:

    protocol="HTTP/1.1"
    connectionTimeout="20000" redirectPort="8443"/>

    修改成支持NIO的类型,配置如下 :

    protocol="org.apache.coyote.http11.Http11NioProtocol
    " connectionTimeout="20000" redirectPort="8443" />

    3.并发数设置

    默认的tomcat配置,并发测试时,可能30个USER上去就当机了。

    添加
    [AppleScript] 纯文本查看 复制代码
    maxThreads="600" //最大线程数    minSpareThreads="100" //初始化时创建的线程数    maxSpareThreads="500" //一旦线程超过这个值,Tomcat会关闭不需要的socket线程    acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到    处理队列中的请求数,超过这个数的请求将不予处理    connectionTimeout="20000"    redirectPort="8443" />  

    或者

    name="tomcatThreadPool"
    namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="400"
    />



    executor="tomcatThreadPool"
    port="80" protocol="HTTP/1.1" connectionTimeout="20000"
    enableLookups="false"

    redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000"
    />



    24 讨论(1)
提交回复