Linux学习49 资源管理三板斧-htop、vmstat、dstat实战

一、回顾

  1、Linux OS基础概念,进程查看的几个工具

  2、内核的功能:进程管理(进程调度)

    进程调度:保存现场,恢复现场

      task struct:任务结构

      task list:任务列表

    CPU:us,sy,ni,id,hi,si,cs,st

    Memory:VSZ,RSS,SHM

  3、命令

    pstree,pgrep,pkill,ps,top,uptime

二、Linux进程管理及作业管理(2)

  1、htop:top的升级版(支持鼠标点击)

    a、htop而言默认是每一颗CPU分开单独显示

    b、可按f1进入帮助界面,其它命令top命令基本都有,只是以下几个命令需要注意:

      l:查看选定进程所打开的文件(可通过上下键选定进程)

      s:跟踪一个进程所发起的系统调用,我们想了解这个进程发起过哪些系统调用选定这个进程然后敲s键即可查看

    c、相应选项

      -d #:指定延迟时间间隔

      -u UserName:仅显示指定用户的进程

      -s COLUME:以指定字段进行排序

    d、子命令

      l:显示选定的进程打开的文件列表(相当于使用lsof命令)

      s:跟踪选定的进程执行的系统调用

      t:以树状结构显示各进程间的父子关系(f5也可以)

      a:将选定的进程绑定至某指定的CPU核心

  2、vmstat命令:报告虚拟内存的统计数据

    a、可以直接用vmstat命令

[root@node1 /]# vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1126348   2224 625920    0    0    54    49  135  187  1  1 99  0  0

    b、以动态形式刷新,2秒1次只显示2次

[root@node1 /]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1126208   2224 625952    0    0    53    48  133  183  1  1 99  0  0
 0  0      0 1126208   2224 625952    0    0     0     0   90  107  0  0 100  0  0

    c、相应的字段意思

      (1)、procs:进程

          r:running,表示等待运行的进程的个数,也就是CPU中等待运行的任务队列长度

          b:处于不可中断睡眠态的进程个数,也就是被阻塞的任务队列的长度,如果这个队列非常长通常意味着io能力很有限

      (2)、memory:内存段

          swpd:交换内存的使用总量,0表示没有启用交换内存

          free:空闲的物理内存总量

          buffer:用于buffer(缓冲)的内存总量

          cache:用于cache(缓存)的内存总量

      (3)、swap

          si(swap in):数据进入swap中的数据的速率,单位是kb/s。

          so(swap out):数据离开swap的速率,单位是kb/s,数据离开swap即数据重新载入内存中,如果数据过大的话通常意味着当前

          如果我们si和so活动非常频繁就意味着我们的物理内存太小了,如果不频繁只是大量的进入到swap很少再出去或者出去的速率低的多的多就意味着问题还不是特别严重

      (4)、io

          bi:从块设备读入数据到系统(也就是加载数据到内存)的速率(kb/s)

          bo:保存数据至块设备的速度(kb/s)

          这个速率是无法评估我们io的性能的,因为如果你的进程需要频繁的用到数据的话这儿bi和bo的速率就会非常大。

      (5)、system

          in:interrupts,中断。即中断速率

          cs:context switch,上下文切换的速率,也就是进程被内核调度来调度去的频率。

          对很繁忙的服务器速率有可能上百或上万,但是如果上下文切换达到上万的话这就意味着需要运行的进程太多而你的CPU能力太弱,弱爆了

          中断的速率一般而言有可能会比较大,尤其是网络服务器,任何一个数据报文到达当前主机时都会发生一个硬中断,任何磁盘发生io时也都会发生一个硬中断,更何况我们应用程序运行时从用户模式转为内核模式时也会发生中断,只不过系统调用是基于软中断模式进行的,用户进程运行时为了执行一些特权操作但是应用程序没这个功能他就需要系统调用来实现,我们当前程序运行过程中,本来是运行自己程序的,后来要进行系统调用,从当前用户模式转为内核模式这个过程是通过软中断的方式进行的。而任何硬件基本的一些事情的通知是通过硬中断来进行的。中断指的是什么呢?比如对于我们当前主机来讲,我们主板上集成的有很多io设备,当我们的io设备需要跟当前的CPU进行交互时,我们CPU怎么知道什么时候IO设备。当某一个设备需要与CPU交互时CPU怎么知道这个设备上有信号到达并处理它的信号呢?比如我敲一下键盘,他会在总线上产生一个电信号,这个电信号要被CPU用来控制和处理,否则的话没法把这个信号接进来,那这么多信号CPU怎么知道哪个是io设备呢?无非就是这样几种方式:

            1、轮询

            2、

          

      (6)、CPU:CPU上等待运行的任务的队列长度

        us(user space):用户空间

        sy(system space):系统空间

        id(idle):空闲值

        wa(wait):等待的时间

        st(stolen):被虚拟化技术所偷走的时间

    d、vmstat命令是通过查看/proc相应的信息来进行显示的

    e、常用选项

      -s :显示当前内存统计数据

[root@node1 ~]# vmstat -s
      2031912 K total memory
       280604 K used memory
       276672 K active memory
       155808 K inactive memory
      1122604 K free memory
         2224 K buffer memory
       626480 K swap cache
      2097148 K total swap
            0 K used swap
      2097148 K free swap
         5576 non-nice user cpu ticks
           15 nice user cpu ticks
         7609 system cpu ticks
      2560603 idle cpu ticks
          152 IO-wait cpu ticks
            0 IRQ cpu ticks
          213 softirq cpu ticks
            0 stolen cpu ticks
       429122 pages paged in
       393344 pages paged out
            0 pages swapped in
            0 pages swapped out
      1881955 interrupts
      2499525 CPU context switches
   1584352017 boot time
         2403 forks

  3、pmap命令

    用来显示报告一个进程的内存映射表

    a、pmap  [options] PID

      -x:显示详细格式的信息

    b、另一种查看方式:cat /proc/PID/maps

  4、glances命令

    监控相应的系统信息

    a、常用选项

      -b:以Byte为单位显示网卡数据速率

      -d:关闭磁盘I/O模块

      -m:关闭mount模块

      -n:关闭network模块

      -t #:刷新时间间隔

      -1:每颗cpu相关数据单独进行显示

      -o:指定输出格式

       -f /PATH/TO/SOMEDIR:设定输出文件的位置

     b、如何在C/S模式下运行glances命令

      服务模式:

        glances -s -B IPADDR (-s是指服务器模式,-B是指监听地址)

        IPADDR:本机的某地址,用于监听

      客户端模式:

        glances -c IPADDR

        IPADDR:远程服务器地址

  5、dstat

    a、不带参数

[root@wohaoshuai1 ~]# dstat 
You did not select any stats, using -cdngy by default.(默认选项是-cdngy)
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  1   1  96   2   0   0| 216k  182k|   0     0 |   0     0 | 130   217 
  0   0 100   0   0   0|   0     0 |  60B  874B|   0     0 |  81    82 
  0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  80    85 
  0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  82    89 
  0   1  99   0   0   0|   0     0 |  60B  346B|   0     0 |  86    84 

    b、常用选项

      -c,--cpu:显示cpu相关信息

        -C #,#...total:显示哪一颗cpu

      -d,--disk:显示磁盘的相关信息

        -D sda,sdb,...,total:显示哪一块磁盘的信息

      -g:显示page相关的统计数据

      -m:Memory的相关统计数据

      -n:interface的相关统计数据

      -p:显示process的相关统计数据

      -r:显示io请求的相关的统计数据

      -s:显示swap的相关统计数据

      --tcp

[root@wohaoshuai1 ~]# dstat --tcp
----tcp-sockets----
lis act syn tim clo
  7   2   0   0   0
  7   2   0   0   0
  7   2   0   0   0
  7   2   0   0   0

      --top-bio:查看最消耗磁盘io的进程

[root@wohaoshuai1 ~]# dstat --top-bio
----most-expensive----
  block i/o process   
bash         87k  126k
                      
                      
                      

      --top-cpu:查看最耗cpu的进程是谁

[root@wohaoshuai1 ~]# dstat --top-cpu
-most-expensive-
  cpu process   
vmtoolsd     0.1
vmtoolsd     1.0
                
                
                
glances      1.0

      --top-int:产生的最多中断数量的进程是谁

      --top-mem:最占用内存的进程

[root@wohaoshuai1 ~]# dstat --top-mem
--most-expensive-
  memory process 
tuned       16.0M
tuned       16.0M
tuned       16.0M

      --top-lantency:延时最大的进程

  6、kill:终止一个进程

    a、用于向进程发送信号,以实现对进程进行管理

    b、显示当前系统可用信号

      kill -l [signal]

[root@wohaoshuai1 ~]# kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    

      显示1号信号:

[root@wohaoshuai1 ~]# kill -l 1
HUP

    c、信号的标识方法有三种

      1)、信号的数字标识

        kill -1 48599

      2)、信号的完整名称

        kill -SIGHUP 48599  #也可写作kill -s SIGHUP

      3)、信号的简写名称

        kill -HUP 48599

    d、向进程发信号

       kill [-s signal|-SIGNAL] pid...

[root@wohaoshuai1 ~]# ps -aux|grep httpd
root      2355  0.0  0.2 230380  5232 ?        Ss   04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2356  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2357  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2358  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2359  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2360  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
root      2397  0.0  0.0 112712   964 pts/1    R+   04:51   0:00 grep --color=auto httpd
[root@wohaoshuai1 ~]# kill -s 15 2356
[root@wohaoshuai1 ~]# ps -aux|grep httpd
root      2355  0.0  0.2 230380  5232 ?        Ss   04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2357  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2358  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2359  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2360  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2405  0.0  0.1 232464  3180 ?        S    04:52   0:00 /usr/sbin/httpd -DFOREGROUND
root      2407  0.0  0.0 112712   964 pts/1    R+   04:52   0:00 grep --color=auto httpd

    e、常用信号

      1)、SIGHUP:无需关闭进程而让其重读配置文件,重读配置文件是需要由其主进程实现,即root运行的这个

[root@wohaoshuai1 ~]# ps -aux|grep httpd
root      2355  0.0  0.2 230380  5232 ?        Ss   04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2357  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2358  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2359  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2360  0.0  0.1 232464  3180 ?        S    04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2405  0.0  0.1 232464  3180 ?        S    04:52   0:00 /usr/sbin/httpd -DFOREGROUND
root      2407  0.0  0.0 112712   964 pts/1    R+   04:52   0:00 grep --color=auto httpd
[root@wohaoshuai1 ~]# kill -1 2355

      2)、SIGINT:终止正在运行的进程,相当于Ctrl + c。

        比如可用先ping一个地址,然后再kill -2 ping 这个进程,这个ping就被中断了

      9)、SIGKILL:杀死运行中的进程。直接强杀,一个进程运行过程中会打开很多文件,他打开一个文件正在写的过程中上去就是一刀。通过这种方式终止进程相应的文件有可能会被损坏。

      15)、SIGTERM:终止运行中的进程;这个进程一般是一个后台进程。kill命令不带参数默认就是15号信号。一个进程运行过程中会打开很多文件,他打开一个文件正在写的过程中如果要杀死他就会提前进行说明,让进程死之前有准备送死的准备。

      18)、SIGCONT:继续

      19)、SIGSTOP:停止,即送到后台

        比如我们打开一个文件/tmp/abc.txt,然后我们编辑了内容,此时我们想把它送到后台,我们可以使用Ctrl + Z键,此时我们可以在ps 中查看。而我们Ctrl + Z就相当于给其发送一个19号信号,如果要让其继续运行我们给其发送18号信号就可以了

[root@wohaoshuai1 ~]# vim aaa.txt 

[1]+  Stopped                 vim aaa.txt
[root@wohaoshuai1 ~]# ps -aux|grep vim
root      2922  0.3  0.2 151664  5340 pts/1    T    06:10   0:00 vim aaa.txt
root      2924  0.0  0.0 112712   960 pts/1    R+   06:10   0:00 grep --color=auto vim
[root@wohaoshuai1 ~]# kill -18 2922
[root@wohaoshuai1 ~]# ps -aux|grep vim
root      2922  0.0  0.2 151664  5340 pts/1    T    06:10   0:00 vim aaa.txt
root      2931  0.0  0.0 112712   964 pts/1    R+   06:11   0:00 grep --color=auto vim

[1]+  Stopped                 vim aaa.txt

        因为vim是在前台运行的因此我们唤不醒他,不过如果是copy命令等就可以,比如我们copy一个大文件,然后我们ctrl + Z让其后台运行,此时他就停止了,然后我们可以发送18号信号让其继续运行。

         我们可以通过fg 命令继续进行我们vim的编辑

[root@wohaoshuai1 ~]# fg

  7、killall命令

    killall [-SIGNAL] program

[root@wohaoshuai1 ~]# ps -aux|grep httpd
root      2355  0.0  0.2 230380  5268 ?        Ss   04:49   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2430  0.0  0.1 232464  3172 ?        S    04:55   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2431  0.0  0.1 232464  3172 ?        S    04:55   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2432  0.0  0.1 232464  3172 ?        S    04:55   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2433  0.0  0.1 232464  3172 ?        S    04:55   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2434  0.0  0.1 232464  3172 ?        S    04:55   0:00 /usr/sbin/httpd -DFOREGROUND
root      2963  0.0  0.0 112712   964 pts/1    R+   06:16   0:00 grep --color=auto httpd
[root@wohaoshuai1 ~]# killall httpd
[root@wohaoshuai1 ~]# ps -aux|grep httpd
root      2972  0.0  0.0 112712   964 pts/1    R+   06:16   0:00 grep --color=auto httpd

...

    

原文地址:https://www.cnblogs.com/Presley-lpc/p/12501817.html