Tomcat优化和JVM分析工具

Posted shenxm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat优化和JVM分析工具相关的知识,希望对你有一定的参考价值。

Tomcat的常见优化和JVM常见分析工具

Tomcat的常用优化配置

    (1) 内存空间:
        /etc/sysconfig/tomcat
            JAVA_OPTS="-server -Xms32g -Xmx32g -XX:NewSize= -XX:MaxNewSize= -XX:PermSize= -XX:MaxPermSize="
                -server:服务器模型
                -Xms:堆内存初始化大小;
                -Xmx:堆内存空间上限;
                -XX:NewSize=:新生代空间初始化大小;                    
                -XX:MaxNewSize=:新生代空间最大值;
                -XX:PermSize=:持久代空间初始化大小;
                -XX:MaxPermSize=:持久代空间最大值; 
                
    (2) 线程池设置:
        <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />
        
        常用属性:
            maxThreads:最大线程数;最大并发连接数;
            minSpareThreads:最小空闲线程数;
            maxSpareThreads:最大空闲线程数;
            acceptCount:等待队列的最大长度;
            URIEncoding:URI地址编码格式,建议使用UTF-8;
            enableLookups:是否启用dns解析,建议禁用; 
            compression:是否启用传输压缩机制,建议“on";
            compressionMinSize:启用压缩传输的数据流最小值,单位是字节;
            compressableMimeType:定义启用压缩功能的MIME类型;
                text/html, text/xml, text/css, text/javascript
            
            
    (3) 禁用8005端口;
        <Server port="-1" shutdown="SHUTDOWN">
        
    (4) 隐藏版本信息:
        <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />
        
        Server="SOME STRING"

JVM常用的分析工具

    jps:用来查看运行的所有jvm进程;
    jinfo:查看进程的运行环境参数,主要是jvm命令行参数;
    jstat:对jvm应用程序的资源和性能进行实时监控;
    jstack:查看所有线程的运行状态;
    jmap:查看jvm占用物理内存的状态;
    jconsole:
    jvisualvm:
    jps:Java virutal machine Process Status tool,
        jps [-q] [-mlvV] [<hostid>]
            -q:静默模式;
            -v:显示传递给jvm的命令行参数;
            -m:输出传入main方法的参数;
            -l:输出main类或jar完全限定名称;
            -V:显示通过flag文件传递给jvm的参数;
            [<hostid>]:主机id,默认为localhost;
    jinfo:输出给定的java进程的所有配置信息;
        jinfo [option] <pid>
            -flags:to print VM flags
            -sysprops:to print Java system properties
            -flag <name>:to print the value of the named VM flag
    jstack:查看指定的java进程的线程栈的相关信息;
        jstack [-l] <pid>
        jstack -F [-m] [-l] <pid>
            -l:long listings,会显示额外的锁信息,因此,发生死锁时常用此选项;
            -m:混合模式,既输出java堆栈信息,也输出C/C++堆栈信息;
            -F:当使用“jstack -l PID"无响应,可以使用-F强制输出信息;
    jstat:输出指定的java进程的统计信息
        jstat -help|-options
        jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
        
        # jstat -options
            -class:class loader
            -compiler:JIT
            -gc:gc
            -gccapacity:统计堆中各代的容量
            -gccause:
            -gcmetacapacity
            -gcnew:新生代
            -gcnewcapacity
            -gcold:老年代
            -gcoldcapacity
            -gcutil
            -printcompilation
        [<interval> [<count>]]
            interval:时间间隔,单位是毫秒;
            count:显示的次数;
            
        -gc:
            YGC:新生代的垃圾回收次数;
            YGCT:新生代垃圾回收消耗的时长; 
            FGC:Full GC的次数;
            FGCT:Full GC消耗的时长;
            GCT:GC消耗的总时长;
       图形工具:
        jconsole
        jvisualvm
    jmap:Memory Map, 用于查看堆内存的使用状态; 
    jhat:Java Heap Analysis Tool
        jmap [option] <pid>
        查看堆空间的详细信息:
            jmap -heap <pid>
        查看堆内存中的对象的数目:
            jmap -histo[:live] <pid>
                live:只统计活动对象;
        保存堆内存数据至文件中,而后使用jvisualvm或jhat进行查看:
            jmap -dump:<dump-options> <pid>
                dump-options:
                live         dump only live objects; if not specified, all objects in the heap are dumped.
                format=b     binary format
                file=<file>  dump heap to <file>

以上是关于Tomcat优化和JVM分析工具的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat8优化--JVM字节码

JVM优化之jmap的使用以及内存溢出分析

JVM字节码

如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU

Tomcat开启JMX功能,使jdk自带的JVisvualVM工具连接JVM,轻松进行性能分析

Tomcat开启JMX功能,使jdk自带的JVisvualVM工具连接JVM,轻松进行性能分析