JVM调优、工具使用与故障分析

一、 JDK运行内存调整:
  • JDK7
-Djdk.tls.ephemeralDHKeySize=2048 -server -Xms512m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxNewSize=600m -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent
  • JDK8
JAVA_OPTS="-Xms1024m -Xmx2048m -Xss1024K  -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"
  • TOMCAT调整(Windows):
    catalina.bat:
SET CATALINA_OPTS=-server -Xms512m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxNewSize=600m -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent
  • TOMCAT调整(Linux):
    catalina.sh:
CATALINA_OPTS="-server -Xms512m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxNewSize=600m -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent"
二、远程调试设置
  • TOMCAT设置(Windows):
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8788
  • TOMCAT设置(Linux):
declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8788" 
三、工具使用
  • jps
    列出JAVA程序路径

    jps -l
    
  • GC信息查看
    jstat -gc PID 周期 总计数
    列出PID进程为2764的统计信息, 每隔250ms统计一次, 共统计20次

    jstat -gc 2764 250 20
    
  • jinfo
    jinfo PID
    显示JAVA进程的JVM配置信息

  • jstack
    jstack -l PID
    显示进程的所有线程堆栈信息

  • jmap
    查看堆使用情况: jmap -heap pid
    查看堆中对象数量和大小: jmap -histo pid
    注意: 如果加上live子参数的话, 会触发一次FUll GC: jmap -histo:live pid
    打印等待终结的对象信息:jmap -finalizerinfo pid
    打印类加载器信息: jmap -clstats pid
    (名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印)

四、故障分析
1. 获取CPU和内存占用最多的程序
  • linux下获取占用CPU资源最多的10个进程,可以使用如下命令:
    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
    
  • 获取占用内存资源最多的10个进程,可以使用如下命令:
    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
    
  • 获取占用最多线程数的进程, 输出至1.txt文本中:
    ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu > 1.txt
    
2. CPU 100%高占用定位分析
  • 通过top命令, 找出最占cpu的进程
  • 分析进程内部最占CPU的线程:
    top -Hp pid
    或
    top -p pid-H
    
  • 将PID转换成对应的16进制
    printf '%x\n' PID 
    
  • 使用jstack定位线程栈信息:
    jstack 8958 | grep 5c7e
    
3. 获取DUMP日志文件
  • jmap获取:
    jmap -dump:format=b,file=/usr/local/test_jvm.dump PID 
    
  • 发生内存溢出时自动导出DUMP文件:
    追加参数, 指定路径:
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=./
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦神-mirson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值