• Java性能调优


    一、Tomcat服务器

    1、Jvm参数调优

    Tomcat 的启动参数位于tomcat的安装目录in目录下,如果你是Linux操作系统就是catalina.sh文件,如果你是Windows操作系统那么 你需要改动的就是catalina.bat文件

    JAVA_OPTS="$JAVA_OPTS -server -Xms4096m -Xmx4096m -Xmn1024m -Xss256K -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/gclogs/gc.log -Djava.awt.headless=true"
    

    解释:
    -server:更高的性能
    -Xms4096m:初始堆内存4g
    -Xmx4096m:最大堆内存4g
    -Xmn1024m:年轻代1g
    -Xss256K:每个线程占用的空间
    -XX:+DisableExplicitGC:禁止显示调用gc
    -XX:MaxTenuringThreshold=15:在年轻代存活次数
    -XX:+UseParNewGC:对年轻代采用多线程并行回收
    -XX:+UseConcMarkSweepGC:年老代采用CMS回收
    -XX:+CMSParallelRemarkEnabled:在使用UseParNewGC 的情况下, 尽量减少 mark 的时间
    -XX:+UseCMSCompactAtFullCollection:在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少
    -XX:LargePageSizeInBytes=128m:指定 Java heap的分页页面大小
    -XX:+UseFastAccessorMethods:get,set 方法转成本地代码
    -XX:+UseCMSInitiatingOccupancyOnly:指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集
    -XX:CMSInitiatingOccupancyFraction=70:年老代到达70%进行gc
    -Djava.awt.headless=true :Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。
    -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/gclogs/gc.log:打印日志信息

    备注:上面的收集器年轻代用的ParNewGC,年老代用的CMS;也可以用G1收集器

    -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:GCPauseIntervalMillis=200
    

    解释:
    -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC #开启G1,这两个要同时使用
    -XX:MaxGCPauseMillis=50 #暂停时间目标;
    -XX:GCPauseIntervalMillis=200 #暂停间隔目标;

    2、Connector优化

    tomcat的安装目录conf下面的server.xml

    <Connector port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    URIEncoding="UTF-8"
    maxThreads="300"
    minSpareThreads="25"
    maxSpareThreads="75"
    enableLookups="false"
    acceptCount="300"
    maxProcessors="1000"
    minProcessors="5"
    useURIValidationHack="false"
    compression="on"
    compressionMinSize="2048"
    compressableMimeType="text/html,text/xml,text/JavaScript,text/css,text/plain"
    redirectPort="8443" />
    

    解释:
    protocol:协议
    connectionTimeout:连接超时时间毫秒数
    URIEncoding:编码
    maxThreads:Tomcat可创建的最大的线程数,即最大并发数
    minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数。
    maxSpareThreads:如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数
    enableLookups:是否允许域名反查
    acceptCount:当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection
    maxProcessors:最大连接数
    minProcessors:初始化连接数
    useURIValidationHack:对url进行检查
    compression:启动压缩
    compressionMinSize:2048当返回内容大于等于2kb启动压缩,到客户端在解压
    compressableMimeType:压缩类型

    二、Springboot项目

    1、Jvm参数

    springboot直接用jar包启动,在启动命令里面加参数,下面是例子:

    nohup java -server -Xms4096m -Xmx4096m -Xmn1024m -Xss256K -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/gclogs/gc.log -Djava.awt.headless=true -jar mq.jar &
    

    2、springboot对内置tomcat进行优化

    在application.yml中配置

    server:
      tomcat:
        uri-encoding: UTF-8
        max-threads: 300
        min-spare-threads: 25
        max-connections: 1000
        accept-count: 300
      port: 8080
      connection-timeout: 20000
      compression:
        enabled: true
        mime-types: text/html,text/xml,text/JavaScript,text/css,text/plain
        min-response-size: 2048
    

    三、性能查看常用命令

    注:128914是线程id
    查看负载:w、uptime
    查看cpu:top
    内存:free
    磁盘:df
    IO:iostat、vmstat
    查看gc情况: jstat -gc 128914 2000 2
    查看堆栈情况:jstack 128914
    分析gc日志:more gc.log
    查看进程里面的所有线程情况:top -Hp 128914

  • 相关阅读:
    mysql两种重要的引擎
    mysql常用代码
    ubuntu常用基本命令
    redis缓存服务器
    memcached缓存服务器
    glusterfs分布式文件服务器
    keepalived双机热备(nginx+mysql)
    nginx负载均衡mysql数据库
    heartbeat双机热备(haproxy或glbd+mysql)
    haproxy负载均衡mysql
  • 原文地址:https://www.cnblogs.com/zhangbin1989/p/9237974.html
Copyright © 2020-2023  润新知