美文网首页
linux学习-常用监控工具

linux学习-常用监控工具

作者: 夏天嘚花花 | 来源:发表于2019-03-03 00:05 被阅读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分析

    相关文章

      网友评论

          本文标题:linux学习-常用监控工具

          本文链接:https://www.haomeiwen.com/subject/lmquuqtx.html