• JVM优化


    JVM优化


    参考

    JVM优化

    设置并行垃圾回收器

    注意:具体的参数可能在不同的JDK版本中有差异

    #年轻代、老年代均使用并行收集器,初始堆内存64M,最大堆内存512M 
    JAVA_OPTS="‐XX:+UseParallelGC ‐XX:+UseParallelOldGC ‐Xms64m ‐Xmx512m ‐ XX:+PrintGCDetails ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCDateStamps ‐ XX:+PrintHeapAtGC ‐Xloggc:../logs/gc.log"
    

    调整堆年代大小

    先来复习下堆的组成:

    JVM占用的内存=metaspace+Heap
    Heap = {Old + NEW = { Eden , from, to } }

    具体调优:

    • ms/mx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
    • NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
    • SurvivorRatio:设置Survivor空间和Eden空间的比例
      具体配置示例:
    JAVA_OPTS="
    ‐XX:+UseParallelGC 
    ‐XX:+UseParallelOldGC 
    ‐Xms128m ‐Xmx1024m 
    ‐ XX:NewSize=64m 
    ‐XX:MaxNewSize=256m 
    ‐XX:+PrintGCDetails 
    ‐ XX:+PrintGCTimeStamps 
    ‐XX:+PrintGCDateStamps 
    ‐XX:+PrintHeapAtGC 
    ‐ Xloggc:../logs/gc.log"  //将GC打印信息输出到文件
    

    设置G1垃圾回收器

    G1垃圾收集是JDK推荐使用的,且配置相对简单,只需要配置3个:开启G1垃圾收集器、设置堆的最大内存和最大的停顿时间,其他的比如newSize等最好让G1收集器自动去配

    JAVA_OPTS="
    ‐XX:+UseG1GC     //使用G1垃圾收集器
    ‐XX:MaxGCPauseMillis=100   //配置最大停顿时间
    ‐Xms128m ‐Xmx1024m     //设置最大堆内存
    ‐ XX:+PrintGCDetails       //下面的都是打印配置
    ‐XX:+PrintGCTimeStamps 
    ‐XX:+PrintGCDateStamps 
    ‐ XX:+PrintHeapAtGC 
    ‐Xloggc:../logs/gc.log
    

    Tomcat优化

    tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要。 对于tomcat的优化,主要是从2个方面入手:

    • 1.tomcat自身的配置
    • 2.tomcat所运行的jvm虚拟机的调优。

    总结来说:
    tomcat性能优化就是需要不断的进行调整参数,然后测试结果,可能会调优也可能会调差,这时就需要借助于gc的可视化工具JMeter和日志分析gceasy.io来看gc的情况。再帮我我们做出决策应该调整

    tomcat配置优化

    • 修改配置以登陆tomcat系统
      1.修改conf/tomcat-users.xml文件,添加如下配置
    <role rolename="manager"/>
    <role rolename="manager-gui"/>
    <role rolename="admin"/>
    <role rolename="admin-gui"/>
    <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
    

    2.修改webapps/manager/META‐INF/context.xml,注释如下内容

    #将<Valve>的内容注释掉
    <Context antiResourceLocking="false" privileged="true" >
        <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" /> -->
    <Manager sessionAttributeValueClassNameFilter="java.lang.(?:Boolean|Integer|Long|Number|String)|org.apache.catalina.filters.CsrfPreventionFilter$LruCache(?:$1)?|java.util.(?:Linked)?HashMap"/></Context>
    

    3.进入tomcat并点击Server.status,输入配置的用户名和密码即可进入系统

    1.禁用AJP链接

    AJP(Apache JServer Protocol) AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省 SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且 在多个请求和响应周期过程会重用连接。在服务状态页面中可以看到"ajp-nio-8009",默认状态下会启用AJP服务,并且占用8009端口。

    我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。
    修改conf下的server.xml文件:

    2.配置线程池

    在tomcat中用户的每一个请求都是一个线程,使用线程池将提高性能。
    3个关键参数:最大线程池maxThreads,初始线程池minSpareThreads和最大等待队列,通过调整这3个参数来调试出最优性能,具体的值需要根据具体的情况而定,可以多做几次调试然后用JMeter来参考数据对比找出最优配置。
    修改server.xml文件
    1.配置executor,打开Executor的注释并添加如下配置

    <Executor name="tomcatThreadPool" namePrefix="catalina‐exec‐" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>
    <!--
    参数说明:
    maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业
    务来判断
    minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
    prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的
    参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
    maxQueueSize,最大的等待队列数,超过则拒绝请求
    -->
    

    2.在Connector中指向刚才配置的Executor

        <Connector excutor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    
    

    3.使用不同的运行模式来提升性能

    tomcat的三种运行模式

      1. bio 默认的模式,性能非常低下,没有经过任何优化处理和支持.
      1. nio nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及 其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio 也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性 能。
      1. apr 安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

    tomcat7推荐使用nio,在tomcat8中有最新的nio2,速度更快,建议使用nio2

    配置nio2:
    直接将protocol HTTP/1.1改为org.apache.coyote.http11.Http11Nio2Protocol

        <Connector excutor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    

    4.设置tomcat的JVM参数进行优化

    在tomcat的bin目录下的Catalina.sh脚本末尾增加JVM运行参数

    本博客为Swagger-Ranger的笔记分享,文章会持续更新
    文中源码地址: https://github.com/Swagger-Ranger
    欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com

  • 相关阅读:
    C语言设计实验报告(第六次)
    C语言设计实验报告(第四次)
    C语言设计实验报告(第三次)
    C语言设计实验报告(第七次)
    C语言设计实验报告(第五次)
    翁恺B站练习题目(持续更新中~~~)
    壁纸
    C语言设计实验报告(第二次)
    C语言设计实验报告(第一次)
    SSM 项目实战
  • 原文地址:https://www.cnblogs.com/Swagger-Ranger/p/10707288.html
Copyright © 2020-2023  润新知