zoukankan      html  css  js  c++  java
  • 第05篇. Tomcat和JDK的内存配置

       

      

    站在人群,我毫不起眼;活在世上,我不玩心眼!

    没有那么远大的目标,但是也不要把我当成傻子!

       

                                                                  --胖先生

       

       

    放在前面要说的话:
    JVM内存分配设置的参数有四个

    -Xmx Java Heap最大值,默认值为物理内存的1/4

    -Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

    -Xmn Java Heap Young区大小,不熟悉最好保留默认值;

    -Xss 每个线程的Stack大小,不熟悉最好保留默认值;

    -XX:PermSize:设定内存的永久保存区域;

    -XX:MaxPermSize:设定最大内存的永久保存区域;

    -XX:PermSize:设定内存的永久保存区域;

    -XX:NewSize:设置JVM堆的'新生代'的默认大小;

    -XX:MaxNewSize:设置JVM堆的'新生代'的最大大小;

    参考: http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

    • Eclipse中设置JDK的内存方式

      为什么要设置JDK的内存呢?

      方式一:有可能的情况是Tomcat的内存溢出了,我需要设置如下的参数[关于下面的设置,需要根据你电脑的内存地址来设置]

    -Xms512M -Xmx1024M -XX:PermSize=512m -XX:MaxPermSize=1024m

    JDK的内存设置操作过程如下

      

    效果如下:

    但是我发现,启动时间别配置之前慢了一些

    方式二:增加JDK的内存的方法,直接在jdk下面的optional java vm arguments; 设置参数

      

       

    • 当你感觉你的Eclipse启动数据比较慢的时候,可以设置如下的属性

      如果使用eclipse的话,那么在解压的根目录中找到eclipse.ini

      如果使用sts的话,那么在根目录中找到STS.ini

    -vmargs

    -Xms128M

    -Xmx512M

    -XX:PermSize=64M

    -XX:MaxPermSize=128M

    :这里的所有的JVM的参数是有设定规则的,补充内容中含有

    • 增加Tomcat的内存方式

      tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。

    • linux下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:

      SET JAVA_OPTS=-Xms512m -Xmx1024m

    • windows下,在tomcat_home}/bin/catalina.bat的前面,增加如下设置:

      SET JAVA_OPTS=-Xms512m -Xmx1024m

      :表示初始化内存为512MB,可以使用的最大内存为1024MB

    • 对Tomcat的优化操作[来源自网络]

      (1) 在bin/catalina.bat文件中加入下面参数,对JVM进行优化,至于这一大驼参数的作用及说明,
      请查看文档: http://www.mzone.cc/article/321.html

    JAVA_OPTS="-server -showversion -Xms1000M -Xmx1000M -XX:PermSize=256m -XX:MaxPermSize=256m"

    JAVA_OPTS="$JAVA_OPTS -d64 -XX:CICompilerCount=8 -XX:+UseCompressedOops"

    JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90"

    JAVA_OPTS="$JAVA_OPTS -XX:ReservedCodeCacheSize=256m -XX:-UseAdaptiveSizePolicy"

    JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai -XX:-DontCompileHugeMethods"

    JAVA_OPTS="$JAVA_OPTS -Xss256k -XX:+AggressiveOpts -XX:+UseBiasedLocking"

    JAVA_OPTS="$JAVA_OPTS -XX:MaxTenuringThreshold=31 -XX:+CMSParallelRemarkEnabled "

    JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=256m -XX:+UseFastAccessorMethods"

    JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"

    JAVA_OPTS="$JAVA_OPTS -XX:+UseGCOverheadLimit -XX:AllocatePrefetchDistance=256 -XX:AllocatePrefetchStyle=1"

    JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:MaxGCPauseMillis=200"

    上述这样的配置,基本上可以达到:

    • 系统响应时间增快
    • JVM回收速度增快同时又不影响系统的响应率
    • JVM内存最大化利用
    • 线程阻塞情况最小化

    -Xms=-Xmx=服务器内存*70%
    如部署tomcat,jboss在同一台服务器 -Xms=-Xmx=服务器内存*80%*1/4

       

    (2) Tomcat连接参数的优化,主要是针对吞吐量做优化:

    修改conf/server.xml文件,把原来

    <Connector port="8080" protocol="HTTP/1.1" />

    修改内容如下:

    <Connector port="8080" protocol="HTTP/1.1"

    URIEncoding="UTF-8"

    minSpareThreads="25"

    maxSpareThreads="75"

    enableLookups="false"

    disableUploadTimeout="true"

    connectionTimeout="20000"

    acceptCount="300"

    maxThreads="300"

    maxProcessors="1000"

    minProcessors="5"

    useURIValidationHack="false"

    compression="on"

    compressionMinSize="2048"

    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

    redirectPort="8443"/>

    一段补充说明:

    搜索【<Executor name="tomcatThreadPool"】,开启并调整为

    <Executor

    name="tomcatThreadPool"

    namePrefix="catalina-exec-"

    maxThreads="1000"

    maxIdleTime="60000"

    minSpareThreads="20"/>

    搜索【port="8080"】,调整为

    <Connector

    port="8080"

    executor=" tomcatThreadPool" //开启线程池

    protocol="org.apache.coyote.http11. Http11AprProtocol" //我们没有安装: 开启Apr协议,需要安装Apr支持 maxHttpHeaderSize="8192"

    maxThreads="1000"

    processorCache="1000"

    acceptCount="1000"

    minSpareThreads="100"

    acceptorThreadCount="8"

    URIEncoding="UTF-8"

    enableLookups="false"

    redirectPort="8443" //关闭反向查询

    connectionTimeout="120000"

    keepAliveTimeout="120000"

    maxKeepAliveRequests="65535"

    disableUploadTimeout="true"

    compression="on"

    compressionMinSize="4096" //开启静态文件压缩

    noCompressionUserAgents="gozilla, traviata" //开启静态文件压缩

    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,appli cation/x-javascript " //开启静态文件压缩

    />

       

       

    可以通过java/jdk/bin下的java visualVM查看eclipse的内存大小和tomcat的内存大小,主要看堆,PermGen两个大小,如图:

       

    胖先生的微信

    感觉该文章对你有所帮助,请点击下方的
    推荐↓↓↓↓↓↓↓↓↓↓
    您的支持是我最大的动力



    支付宝包扫一扫





    谢谢两位,小伟的支持

        

  • 相关阅读:
    短信猫软件的实现(C#)<八>7bitPDU的解码
    短信猫软件的实现(C#)<七>短信猫(简化测试版)实现
    短信猫软件的实现(C#)<十一>软件实现(完结篇)
    我的EDA课程设计 Verilog HDL 自动售票机的实现
    Linux JNI(1)
    Notes
    Linux 线程属性
    Linux shared lib
    Linux 几个调试命令
    Java工具
  • 原文地址:https://www.cnblogs.com/pangxiansheng/p/5378537.html
Copyright © 2011-2022 走看看