linux和jvm系统诊断工具

  • uptime

09:20:31 up 84 days, 17:55,  3 users,  load average: 25.34, 10.29, 4.36

Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load

 

  • vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 1  0 916560 586560 141088 747096    1    1     5    13    1    0  7  1 92  0  0

 

Procs(进程):

r: 运行队列中进程数量

b: 等待IO的进程数量

Memory(内存):

swpd: 使用虚拟内存大小

free: 可用内存大小

buff: 用作缓冲的内存大小

cache: 用作缓存的内存大小

Swap:

si: 每秒从交换区写到内存的大小

so: 每秒写入交换区的内存大小

IO:(现在的Linux版本块的大小为1024bytes)

bi: 每秒读取的块数

bo: 每秒写入的块数

系统:

in: 每秒中断数,包括时钟中断。

cs: 每秒上下文切换数。

CPU(以百分比表示):

us: 用户进程执行时间(user time)

sy: 系统进程执行时间(system time)

id: 空闲时间(包括IO等待时间)

wa: 等待IO时间

 

r 如果长期大于1,说明cpu不足,需要增加cpu。

wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。

 

  • jstat(java虚拟机的内存使用情况)

 

jstat -option(查看哪项监控的指标)
-class 显示加载class的数量,及所占空间等信息
-compiler 显示VM实时编译的数量等信息
-gc 可以显示gc的信息,查看gc的次数,及时间
-gccapacity VM内存中三代(young,old,perm)对象的使用和占用大小
-gccause
-gcnew new对象的信息
-gcnewcapacity new对象的信息及其占用量
-gcold old对象的信息
-gcoldcapacity old对象的信息及其占用量
-gcpermcapacity perm对象的信息及其占用量
-gcutil
-printcompilation

如:jstat -gc 8672
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
63104.0 65152.0  0.0   3906.9 379712.0 102135.8  699072.0   279404.1  262144.0 95494.6     39    2.000   2      1.027    3.027
 
  • jstack(用来查看某个Java进程内的线程堆栈信息
jstack pid
可以用来定位最占cpu的java线程正在执行的类
1.jps定位java进程
8672 Bootstrap
2.top -Hp pid定位最占cpu的线程
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                    
 8672 jakarta   15   0 2981m 1.3g 9288 S  0.0 16.4   0:00.00 java                                                                                                       
 8677 jakarta   15   0 2981m 1.3g 9288 S  0.0 16.4   0:01.41 java                                                                                                       
 8678 jakarta   16   0 2981m 1.3g 9288 S  0.0 16.4   0:01.69 java                                                                                                          
3.获得线程id的十六进制码
printf '%x' 8672
21e0
4.jstack pid | grep 21e0

 
  • jmap
jmap option pid
最常用的是查看当前存活对象占用内存的情况。
如:jmap -histo:live > jmap.log
um     #instances         #bytes  class name
----------------------------------------------
   1:       1092436       61273432  [C
   2:       1101637       44065480  java.lang.String
   3:        542083       26019984  java.util.HashMap$Entry
   4:        148975       20884952  <constMethodKlass>
   5:        148975       17888424  <methodKlass>
   6:         27763       16417688  [B
   7:         13671       15051640  <constantPoolKlass>
   8:        526052       12625248  java.lang.Integer
   9:         13671       10527656  <instanceKlassKlass>
  10:         17970       10056176  [Ljava.util.HashMap$Entry;

也可以用来dump整个jvm,之后用visualVM等工具分析
 

 jstat分析jvm内存基本情况

 jmap分析jvm对象占用情况

 jstack分析线程运行情况

猜你喜欢

转载自xtuhcy.iteye.com/blog/2040326