简谈JVM之性质量监督控和调优,top定位品质难题

平昔质量难题,尤其是cpu使用率过高时,常常索要研究cpu消耗较高的线程,然后查看其货仓,从而进入代码定位难题。
   

品质监察和控制

  1. linux命令监察和控制
    uptime 展现系统运营时刻、连接数、负载意况
    top 系统运作时刻、平均负载景况、cpu使用率(us用户空间占比
    sy内核空间占比 ni用户进程空间更换过优先级的占比 id空闲占比
    wa等待输入输出占比)、内部存款和储蓄器使用状态、任务运行计算境况、空间改动意况
    vmstat 总计种类cpu、io、内部存款和储蓄器、线程上下文切换指标
    pidstat 查看进程详细音讯,比如说cpu、io、内部存款和储蓄器等。

找寻负载最高的线程以及它的线程饭馆?
先通过top命令查找当前负荷最高的进度
接下来通过 top -H -p pid 或 ps -p pid -L -o pcpu,tid,tname,cmd 或 pidstat
-p pid -u(监察和控制cpu) -t(监控线程) -d(监察和控制io) -r(监察和控制内部存款和储蓄器) 一(收集频率)
叁(采撷次数)
然后经过 jstack -l pid >jstack.txt
打出线程旅馆,依照第3个步骤找寻的线程id转化为1六进制,在文书中找到相应的nid与之对象,对应的旅馆正是负载最高线程的仓库。

  1. jdk自带的工具
    jps 显示java进程号
    jinfo 显示jvm配置参数音信
    jmap 堆信息
    jmap -histo pid >1.txt 生成堆快速照相和对象计算消息
    jmap -dump:format=b,file=heap.hprof pid 生成堆dump文件
    jstack -l pid >stack.txt 生成线程旅舍信息

 

属性调优

打字与印刷gc消息有关参数
-verbose:gc
-XX:+printGC
-XX:+printGCDetails
-XX:+printGCTimeStamps
-Xloggc:log/gc.log
-XX:+printHeapAtGC
-XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpPath
在OOM自动dump饭馆使用情形,保留现场

堆大小分配
-Xms -Xmx 最大堆和纤维堆分配
-Xmn 新生代堆大小
-XX:NewRadio 新生代占比 官方推荐新生代占比3/8
-XX:SurHTCrRadio 幸存区占比 官方推荐八,幸存区占比1/10

仓库、线程仓库分析
jmap -F dump:format=b,file=(pid)heap.log (pid)
jstack -l (pid) ~/(pid)jstack.txt
小心:jmap或者会导致jvm
stw,目前中断,谨慎使用,优先选项命令配置,触发oom时自动dump
线程dump入眼关切如下:
死锁,deadlock(入眼关怀)
试行中,Runnable(一般景观下不关怀,假诺长日子有相当大大概是死循环)
等候能源,waiting on conditon(着重关心)
卡住,blocked(重视关切)

本场景下, jstack+top是一种至极卓越的不二秘诀。

 

jstack+top

 

壹、top -H 查看cpu占用较高的线程,记录十进制的线程id

二、jstack  将线程新闻dump到文件中,在文书中依照线程id查找该线程的仓库。
注意,jstack输出中线程id是1陆进制的,这里要做三次进制调换。 

三、研讨这几个线程的库房