Linux基础(50)之进程管理工具之二

Linux基础(50)之进程管理工具之二

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

本篇内容接上一篇继续介绍 Linux 中的进程管理工具。

vmstat

vmstat 是一个用来查看虚拟内存状态信息的工具,和 top 命令一样也是属于很古老的工具。
使用格式如下:

vmstat [options] [delay [count]]
    option:常用选项
        -s:显示内存的统计数据;
    [delay [count]]:指定刷新时间;

直接执行 vmstat 结果如下:

image.png

其中每列的具体信息如下:

procs:进程相关
    r:等待运行的进程队列长度;
    b:处于阻塞状态的进程队列长度(处于不可中断睡眠态的进程个数);
memory:内存相关
    swpd:交换内存的使用总量;
    free:物理内存的空闲总量;
    buffer:用于 buffer 的内存总量;
    cache:用户 cache 的内存总量;
swap:交换分区相关
    si:数据进入到 swap 的速率,单位是 kb/s;
    so:数据从 swap 离开的速率,单位是 kb/s;
io:IO 相关
    bi:从块设备读入数据到系统的速率,单位是 kb/s;
    bo:保存数据至块设备的速率,单位是 kb/s;
system:系统相关
    in:interrupts,中断速率;
    cs:context switch,进程切换速率;
cpu:CPU 相关
    us:用户空间占据的比例;
    sy:内核空间占据的比例;
    id:空闲比例;
    wa:等待 IO 完成所消耗的时间比例;
    st:被虚拟化技术偷走的时间比例;

指定每 1 秒刷新:

vmstat1

指定每 1 秒刷新,刷新 3 次后退出:

vmstat2

pmap

pmap 用来查看一个进程的内存映射表。
使用格式如下:

pmap [options] pid [...]
    options:常用选项
        -x:以扩展格式显示;
        -d:显示为磁盘格式;
        -q:以静默模式显示;
    pid:进程的 ID 号;

以查看进程号为 1 的进程内存映射信息为例:

image.png

之前有说过 Linux 的各个进程信息其实是保存在 /proc/<进程号> 目录中的,而进程的映射表也保存在该目录中并命名为 mapspmap 也是通过该文件来查看映射信息的。仍然以进程号为 1 的进程为例,查看通过 /proc 目录查看它的内存映射表:
image.png

glances

glances 是一个相对比较新的系统监控工具,用 Python 编写的,使用 psutil 库从系统获取信息。可以用它来监控 CPU、平均负载、内存、网络接口、磁盘 I/O,文件系统空间利用率、挂载的设备、所有活动进程以及消耗资源最多的进程。glances 有很多有趣的选项。它的主要特性之一是可以在配置文件中设置阀值(careful 小心、warning 警告、critical 致命),然后它会用不同颜色显示信息以表明系统的瓶颈。

glances 需要在添加 epel 源后执行 yum install glances -y 额外安装。

直接执行 glances 效果如下:

image.png

内建命令:

 a  Sort processes automatically          b  Bytes or bits for network I/O      
 c  Sort processes by CPU%                l  Show/hide alert logs               
 m  Sort processes by MEM%                w  Delete warning alerts              
 u  Sort processes by USER                x  Delete warning and critical alerts 
 p  Sort processes by name                1  Global CPU or per-CPU stats        
 i  Sort processes by I/O rate            I  Show/hide IP module                
 t  Sort processes by TIME                D  Enable/disable Docker stats        
 d  Show/hide disk I/O stats              T  View network I/O as combination    
 f  Show/hide filesystem stats            U  View cumulative network I/O        
 n  Show/hide network stats               F  Show filesystem free space         
 s  Show/hide sensors stats               g  Generate graphs for current history
 2  Show/hide left sidebar                r  Reset history                      
 z  Enable/disable processes stats        h  Show/hide this help screen         
 3  Enable/disable quick look plugin      q  Quit (Esc and Ctrl-C also work)    
 e  Enable/disable top extended stats  
 /  Enable/disable short processes name
 0  Enable/disable Irix process CPU  

常用选项:

  • -b:以字节为单位显示网卡传输速率,对应 b 内建命令;
  • -d:禁用磁盘 I/O 模块信息,对应 d 内建命令;
  • -f <file>:设定输入文件位置;
  • -o <html|csv>:输出格式;
  • -m:禁用挂载模块信息,对应 f 内建命令;
  • -n:禁用网络模块信息,对应 n 内建命令;
  • -t #:设定延迟时间,对应 t 内建命令;
  • -1:每个 CPU 相关数据单独显示;

C/S模式下运行glances命令

以服务模式运行:

glances -s -B IPADDR
    -s:指定以服务模式运行;
    -B IPADDR:指定监听的地址 IPADDR(本机);

以客户端模式运行:

glances -c IPADDR
    -c:指定以客户端模式运行;
    IPADDR:要连接的服务端地址;

看如下示例:
我在 10.0.1.200 上以服务端模式开启一个 glances 监听服务:

[root@zzehost ~]# glances -s -B 10.0.1.200
Glances server is running on 10.0.1.200:61209

然后在 10.0.1.202 上以客户端模式连接到 10.0.1.200,执行 glances -c 10.0.1.200,结果如下:

image.png

注意:以客户端方式连接时不需要指定端口,指定了端口连不上的。。

dstat

dstatvmstat 的增强版,也是一个用来生成系统资源统计数据的工具,但是二者的使用和显示风格是有很大差异的。
使用格式如下:

dstat [-afv] [options..] [delay [count]]
    options:常用选项
        -c:查看 CPU 状态数据;
        -C:指定 CPU 编号,显示指定 CPU 的状态信息,编号从 0 开始计数,如查看第一颗 CPU 的状态信息则可执行 dstat -C 0,不指定编号,使用 total 则表示综合所有 CPU;
        -d:查看磁盘读写速率;
        -D:指定磁盘设备,显示指定磁盘的读写速率,使用  total 则表示综合所有磁盘;
        -g:显示页面换进/换出速率;
        -i:仅显示中断统计数据;
        -l:显示负载相关统计数据;
        -m:显示内存相关统计数据;
        -n:显示网络相关统计数据;
        -p:显示进程相关统计数据;
        -r:显示 I/O 读写请求统计数据;
        -s:显示交换内存的相关统计数据;
        -t:显示日期时间;
        -ipc:显示进程间通信的相关统计数据;
        --lock:显示文件锁的相关统计数据;
        --row:显示裸套接字相关统计数据;
        --tcp:显示 tcp 连接相关统计数据;
        --udp:显示 udp 连接相关统计数据;
        --socket:显示 Socket 连接相关统计数据,相当于同时使用 --tcp、--udp、--row;
        --top-cpu:显示最消耗 CPU 的进程;
        --top-int:显示中断最多的进程;
        --top-io:显示占用 IO 资源最多的进程;
        --top-mem:显示占用内存最多的进程;
        --top-lantency:显示延迟最大的进程;
        
    delay [count]:刷新间隔时间,默认为 1 秒;

kill

kill 命令常用来杀死进程,它实际上是向一个进程发送控制信号,所以 kill 命令也不仅仅只能用来杀死进程,还可以用其来对进程做其它的管理操作。

kill支持的信号

可以使用 kill -l 查看支持的信号:

[root@zzehost ~]# 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	

在命令执行过程中按 CTRL + C 实际上就是向执行的进程发送了 2) SIGINT 中断信号。

常用信号有如下:

  • 1) SIGHUP:通知进程在不关闭的前提下重读配置文件,并不是所有的进程都支持;
  • 2) SIGINT:中止正在运行的进程,相当于 CTRL + C
  • 9) SIGKILL:杀死正在运行的进程;
  • 15) SIGTREM:正常终止正在运行的进程;
  • 18) SIGCONT:让停止态的进程继续运行;
  • 19) SIGSTOP:让进程转为停止态;

向进程发送指定信号

首先要指定要发送的信号,指定信号有如下三种方式:

  1. 信号的数字标识,如:1、2、9;
  2. 信号的完整名称,如:SIGHUP;
  3. 信号的简写名称,如:HUP;

向进程发送信号的语法如下:

kill [-SIGNAL] PID...

以给 PID 为 5208 的进程发送 15 号信号为例,有如下三种方式:

  1. kill -15 5208
  2. kill -SIGTERM 5208
  3. kill -TERM 5208

给某名称下的所有进程发送信号

要给某名称下的所有进程发送信号,可使用 killall 命令,格式如下:

killall [-SIGNAL] <process_name>
    SIGNAL:要发送的信号;
    process_name:进程名称;

以终止所有名为 httpd 的进程为例:

killall -15 httpd

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/linux-base-50.html

Buy me a cup of coffee ☕.