在文书中遵照线程id查找该线程的仓库,找寻负载最高的线程以及它的线程仓库

恒定品质难题,尤其是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
打出线程货仓,依据第一个步骤找寻的线程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:Sur诺基亚rRadio 幸存区占比 官方推荐8,幸存区占比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

2、jstack  将线程音信dump到文件中,在文件中依照线程id查找该线程的仓库。
注意,jstack输出中线程id是1六进制的,这里要做一次进制转变。 

三、研商那个线程的酒馆

相关文章