linux学习-常用监控工具

2019-03-03  本文已影响0人  夏天嘚花花

TOP

top命令是Linux下常用的性能分析工具,能够实时的显示系统中个个进程的资源占用情况
如果要看单个线程的Top 可以使用 top -Hp pid
top输出如下

[root@server-1 data]# top
#这一行是任务队列信息
top - 06:38:39 up 13 min(系统运行时间),  1 user(当前登录用户数),  load average: 0.01, 0.02, 0.00 (系统的平均负载,分别表示1分钟,5分钟,15分钟)
#进程统计信息
Tasks:  85 total(进程总数),   1 running(正在运行的进程数),  84 sleeping(休眠的进程数),   0 stopped(停止的进程数),   0 zombie(僵尸进程数)
#CUP信息
Cpu(s):  0.5%us(用户空间CUP占用率),  2.7%sy(内核空间CUP使用率),  0.0%ni, 96.4%id(空闲CPU占用率),  0.1%wa,  0.0%hi,  0.4%si,  0.0%st
Mem:   1004412k total(物理内存总量),   643432k used(已使用的物理内存),   360980k free(空闲物理内存),    18172k buffers(内核缓冲使用量)
Swap:  2031608k total(交换区总量),        0k used,  2031608k free,    97488k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                     
  1250 root      20   0  190m 8320 5024 S  2.0  0.8   0:04.38 vmtoolsd                                                                                                     
     1 root      20   0 19400 1568 1256 S  0.0  0.2   0:02.56 init                                                                                                         
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                     
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                                                                  
     4 root      20   0     0    0    0 S  0.0  0.0   0:00.19 ksoftirqd/0                                                                                                  
     5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                                                                  
     6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                                                                   
     7 root      20   0     0    0    0 S  0.0  0.0   0:03.18 events/0                                                                                                     
     8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup                                                                                                       
     9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper                                                                                                      
    10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns                                                                                                        
    11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr                                                                                                    
    12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm                                                                                                           
    13 root      20   0     0    0    0 S  0.0  0.0   0:00.03 sync_supers                                                                                                  
    14 root      20   0     0    0    0 S  0.0  0.0   0:00.02 bdi-default                                                                                                  
    15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                                                                                                
    16 root      20   0     0    0    0 S  0.0  0.0   0:00.22 kblockd/0                                                                                                    
    17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpid                                                                                                       
    18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify                                                                                                 
    19 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_hotplug                                                                                                
    20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_aux                                                                                                      
    21 root      20   0     0    0    0 S  0.0  0.0   0:00.01 ata_sff/0                                                                                                    
    22 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd                                                                                                
    23 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khubd                                                                                                        
    24 root      20   0     0    0    0 S  0.0  0.0   0:00.03 kseriod                                                                                                      
    25 root      20   0     0    0    0 S  0.0  0.0   0:00.00 md/0    

PID : 进程ID
USER : 进程所有者的用户名
PR : 优先级
NI ; nice值,负值表示高优先级,正值表示低优先级
%CPU : 上次更新到现在的CUP时间占用百分比
TIME+:进程使用的CPU时间总计
%MEM:进程使用的物理内存百分比

监控IO使用 --- iostat命令

用来检测IO使用情况 使用yum install -y sysstat安装
通过此命令可以快速定位是否产生了大量的IO操作

[root@server-1 data]# iostat 1 3  (表示间隔1秒输出3此)
Linux 2.6.32-431.el6.x86_64 (server-1)  03/02/2019  _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.37    0.00    1.83    0.04    0.00   97.76

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               4.10       206.40        39.31     452208      86124

tps:该设备每秒的传输次数
Blk_read/s:每秒从设备读取的数据量
Blk_wrtn/s:每秒从设备写入的数据量
Blk_read:读取的总数据量
Blk_wrtn:写入的总数据量

多功能诊断器--- pidstat

pidstat 不仅可以监视进程的性能情况狂,也可以监视线程的性能情况
1.cup使用率监控
编译并执行java
javac HoldCUPMain.java
java -cp . HoldCUPMain

public class HoldCUPMain {
    public static class HoldCUPTask implements Runnable{
        @Override
        public void run() {
            while(true){
                double e = Math.random() * Math.random();
            }
        }
    }
    public static class LazyTask implements Runnable{
        @Override
        public void run() {
            try{
                while (true){
                    Thread.sleep(1000);
                }
            }catch (Exception e){
            }
        }
    }
    public static void main(String[] args){
        new Thread(new HoldCUPTask()).start();
        new Thread(new LazyTask()).start();
        new Thread(new LazyTask()).start();
        new Thread(new LazyTask()).start();
    }
}
[root@server-1 ~]# jps
3504 HoldCUPMain
3529 Jps
[root@server-1 ~]# pidstat -p 3504 -u -t 1 3  [u表示对CUP使用率监控, -p后面接进程号 -t表示系统性能的监控细化到线程级别]
Linux 2.6.32-431.el6.x86_64 (server-1)  03/02/2019  _x86_64_    (1 CPU)

07:39:30 AM      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
07:39:31 AM      3504         -  100.00    7.14    0.00  100.00     0  java
#忽略了几行没用的输出
07:39:31 AM         -      3571  100.00    7.14    0.00  100.00     0  |__java
07:39:31 AM         -      3515    0.00    0.00    0.00    0.00     0  |__java
07:39:31 AM         -      3516    0.00    0.00    0.00    0.00     0  |__java
07:39:31 AM         -      3517    0.00    0.00    0.00    0.00     0  |__java

这里可以看出3571这个进程使用了CPU最高,我们可以进一步使用 jstack -l 3571来找到是哪一行导致的CUP升高

这里的0xe9f就是对应的3571
"Thread-0" #8 prio=5 os_prio=0 tid=0x0000000001542000 nid=0xe9f runnable [0x00007f0f99ac2000]
   java.lang.Thread.State: RUNNABLE
    at HoldCUPMain$HoldCUPTask.run(HoldCUPMain.java:11)
    at java.lang.Thread.run(Thread.java:745)

2.监控IO的使用

[root@server-1 home]# pidstat -p 3733 -d -t 1 1 [-d 表示监控的IO]
Linux 2.6.32-431.el6.x86_64 (server-1)  03/02/2019  _x86_64_    (1 CPU)
#由于我这个程序不是IO操作的所以都是0
07:54:18 AM      TGID       TID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
07:54:19 AM      3733         -      0.00      0.00      0.00  java
07:54:19 AM         -      3733      0.00      0.00      0.00  |__java
07:54:19 AM         -      3734      0.00      0.00      0.00  |__java
07:54:19 AM         -      3735      0.00      0.00      0.00  |__java
07:54:19 AM         -      3736      0.00      0.00      0.00  |__java
07:54:19 AM         -      3737      0.00      0.00      0.00  |__java
07:54:19 AM         -      3738      0.00      0.00      0.00  |__java
07:54:19 AM         -      3739      0.00      0.00      0.00  |__java
07:54:19 AM         -      3740      0.00      0.00      0.00  |__java
07:54:19 AM         -      3741      0.00      0.00      0.00  |__java
07:54:19 AM         -      3742      0.00      0.00      0.00  |__java
07:54:19 AM         -      3743      0.00      0.00      0.00  |__java
07:54:19 AM         -      3744      0.00      0.00      0.00  |__java
07:54:19 AM         -      3745      0.00      0.00      0.00  |__java
07:54:19 AM         -      3746      0.00      0.00      0.00  |__java

查看java进程 --- jps

[root@server-1 ~]# jps -v -l [-v 输出jvm参数配置 -l输出主函数的完整路径]
2389 HoldCUPMain
2456 sun.tools.jps.Jps -Denv.class.path=/usr/java/jdk1.8.0_11/lib/ -Dapplication.home=/usr/java/jdk1.8.0_11 -Xms8m

查看虚拟机运行时信息 --- jstat命令

[root@server-1 ~]# jps -v -l
2389 HoldCUPMain
2501 sun.tools.jps.Jps -Denv.class.path=/usr/java/jdk1.8.0_11/lib/ -Dapplication.home=/usr/java/jdk1.8.0_11 -Xms8m
[root@server-1 ~]# jstat -gc 2389 1000 2 [一共输出2次间隔1000毫秒]
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
128.0  128.0   0.0    0.0    1024.0   465.3    15104.0      0.0     4480.0 674.0  384.0   66.6       0    0.000   0      0.000    0.000
128.0  128.0   0.0    0.0    1024.0   465.3    15104.0      0.0     4480.0 674.0  384.0   66.6       0    0.000   0      0.000    0.000
S0C: s0的大小(下面的单位都是KB)
S1C: s1的大小
S0U: s0已使用的大小
S1U: s1已使用的大小
EC: edgn区的大小
EU: edgn区的已使用空间
OC: 老年代大小
OU: 老年代已使用的空间
MC:永久代大小
MU:永久代已使用空间
YGC:新生代GC次数
YGCT:新生代GC耗时
FGC:FullGC次数
FGCT:FullGC耗时
GCT:GC总耗时

导出堆到文件 ---jmap命令

生成出来的hprof可以给VisualVM等工具进行分析
[root@server-1 xuzy]# jps
2688 Jps
2567 HoldCUPMain
[root@server-1 xuzy]# jmap -dump:format=b,file=/home/xuzy/javaTest/2567.hprof 2567
Dumping heap to /home/xuzy/javaTest/2567.hprof ...
Heap dump file created

JDK自带的堆分析工具 --- jhat命令

用来分析上面hprof文件,一般不使用,太麻烦。可以使用VisualVM分析

查看线程堆栈 -- jstack命令

也可以直接hprof用VisualVM分析

上一篇 下一篇

猜你喜欢

热点阅读