Linux多功能诊断器-pidstat

    在Linux下,中间件如weblogic,tomcat会进程资源飙高,如CPU,IO,memory。你可以用top,vmstat,iostat命令分别看,也可以用一个工具搞定就是pidstat,它不仅可以监控进程的性能情况,也可以监控线程的性能情况。

安装:
CentOS/Fedora/RHEL版本的linux中则使用下面的命令
  # yum install sysstat
在Debian/Ubuntu系统中可以使用下面的命令来安装
  # sudo apt-get install sysstat


当然,也可以从这里下载 https://www.icewalkers.com/Linux/Software/59040/Sysstat.html

写一个demo模拟CPU飙高的情况:

public class PIDTestCPU {
    public static class CPUTask implements Runnable{
        public void run() {
            while(true){
                double a=Math.random()*Math.random();
            }
        }
    }
    public static class IdleTask implements Runnable{
        public void run(){
            try{
                while(true){
                    Thread.sleep(2000);
                }
            }catch(Exception e){


            }
        }
    }

    public static void main(String[] args){
        new Thread(new CPUTask()).start();
        new Thread(new IdleTask()).start();
        new Thread(new IdleTask()).start();
        new Thread(new IdleTask()).start();
    }
}
[root@localhost ~]# java PIDTestCPU
[root@localhost ~]# jps
11161 PIDTestCPU
11239 Jps

[root@localhost ~]# pidstat -p  11161  1 3 -u -t
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain)     02/09/2017      _x86_64_        (1 CPU)

06:11:03 PM      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
06:11:04 PM     11161         -  100.00    0.00    0.00  100.00     0  java
06:11:04 PM         -     11161    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11162    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11163    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11164    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11165    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11166    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11167    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11168    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11169    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11170    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11171   99.00    0.00    0.00   99.00     0  |__java
06:11:04 PM         -     11172    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11173    0.00    0.00    0.00    0.00     0  |__java
06:11:04 PM         -     11174    0.00    0.00    0.00    0.00     0  |__java

十进制11171转换为十六进制2ba3

2017-02-09 18:11:54
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.45-b01 mixed mode):

"DestroyJavaVM" prio=10 tid=0x00007f7078006800 nid=0x2b9a waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Thread-3" prio=10 tid=0x00007f70780a7800 nid=0x2ba6 waiting on condition [0x00007f7069a64000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at PIDTestCPU$IdleTask.run(PIDTestCPU.java:13)
        at java.lang.Thread.run(Thread.java:662)

"Thread-2" prio=10 tid=0x00007f70780a5800 nid=0x2ba5 waiting on condition [0x00007f7069b65000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at PIDTestCPU$IdleTask.run(PIDTestCPU.java:13)
        at java.lang.Thread.run(Thread.java:662)

"Thread-1" prio=10 tid=0x00007f70780a3800 nid=0x2ba4 waiting on condition [0x00007f7069c66000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at PIDTestCPU$IdleTask.run(PIDTestCPU.java:13)
        at java.lang.Thread.run(Thread.java:662)

"Thread-0" prio=10 tid=0x00007f70780a1800 nid=0x2ba3 runnable [0x00007f7069d67000]
   java.lang.Thread.State: RUNNABLE
        at PIDTestCPU$CPUTask.run(PIDTestCPU.java:6)
        at java.lang.Thread.run(Thread.java:662)

"Low Memory Detector" daemon prio=10 tid=0x00007f7078088000 nid=0x2ba1 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=10 tid=0x00007f7078085800 nid=0x2ba0 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=10 tid=0x00007f7078083000 nid=0x2b9f waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x00007f7078081000 nid=0x2b9e waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x00007f7078064000 nid=0x2b9d in Object.wait() [0x00007f707c22b000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000eb601300> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
        - locked <0x00000000eb601300> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171)

"Reference Handler" daemon prio=10 tid=0x00007f7078062000 nid=0x2b9c in Object.wait() [0x00007f707c32c000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000eb6011d8> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:485)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x00000000eb6011d8> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=10 tid=0x00007f707805b800 nid=0x2b9b runnable 
"VM Periodic Task Thread" prio=10 tid=0x00007f7078093000 nid=0x2ba2 waiting on condition 
JNI global references: 888
Heap
 def new generation   total 4736K, used 446K [0x00000000eb600000, 0x00000000ebb20000, 0x00000000f08a0000)
  eden space 4224K,  10% used [0x00000000eb600000, 0x00000000eb66fb30, 0x00000000eba20000)
  from space 512K,   0% used [0x00000000eba20000, 0x00000000eba20000, 0x00000000ebaa0000)
  to   space 512K,   0% used [0x00000000ebaa0000, 0x00000000ebaa0000, 0x00000000ebb20000)
 tenured generation   total 10624K, used 0K [0x00000000f08a0000, 0x00000000f1300000, 0x00000000fae00000)
   the space 10624K,   0% used [0x00000000f08a0000, 0x00000000f08a0000, 0x00000000f08a0200, 0x00000000f1300000)
 compacting perm gen  total 21248K, used 2590K [0x00000000fae00000, 0x00000000fc2c0000, 0x0000000100000000)
   the space 21248K,  12% used [0x00000000fae00000, 0x00000000fb0879f0, 0x00000000fb087a00, 0x00000000fc2c0000)

pidstat -p  11161  1 3 -u -t
CPU监控:pidstat -p指定进程ID,-u表示对CPU使用率监控,参数1 3 表示每秒采集1次,共采集三次
%usr: 进程在用户态运行所占cpu时间比率
%system: 进程在内核态运行所占cpu时间比率
%CPU: 进程运行所占cpu时间比率
CPU: 指示进程在哪个核运行

pidstat -p  11161  1 3 -d -t
IO监控:pidstat -p指定进程ID,-d表示对磁盘IO使用率监控,参数1 3 表示每秒采集1次,共采集三次
kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位)
kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)

pidstat -p  11161  1 3 -r -t
内存监控:pidstat -p指定进程ID,-r表示对内存监控,参数1 3 表示每秒采集1次,共采集三次
minflt/s:进程每秒不需要从磁盘中调出内存页的总数
majflt/s:进程每秒需要从磁盘中调出内存页的总数,一般在内存使用紧张时产生
VSZ:进程使用虚拟内存大小,单位KB
RSS:占用物理内存大小,单位KB
%MEM:占用内存比率
Average:         TGID       TID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
Average:        11161         -      0.00      0.00 1059588  20552   2.03  java
Average:            -     11161      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11340      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11341      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11342      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11343      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11344      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11345      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11346      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11347      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11348      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11349      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11350      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11351      0.00      0.00 1059588  20552   2.03  |__java
Average:            -     11352      0.00      0.00 1059588  20552   2.03  |__java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值