Linux进程管理

1、Linux程序与进程
程序:

程序是一组指令及参数的集合,通过逻辑控制运行起来,完成某项特定任务。
静态的,封闭的。

进程:

进程是程序运行起来的结果,是操作系统运行的基本单位。

有生命周期(产生---->死亡)
进程有运行状态(running,sleepping,等待,僵死)
并发性,交互性(管道)----共享内存,队列(kafka)。
程序与进程的区别:
程序是静态,进程是动态的有生命周期,有状态
程序与进程的关系不是一一对应,/usr/bin/vim(程序) -----vim test1 ,vim test2
程序是封闭的,进程有并发性和交往性。进程之间可以通信,
(|);方式:(1)共享内存,(2)消息队列

2、子进程和父进程

子进程继承父进程的特性:安全性的身份认证;过去和当前的文件描述符,端口等资源特权;环境变量;程序代码。
父进程------->fork()----->子进程
子进 ------>exec()------>运行程序
子进程-------->exit()------->退出

  每个进程都可以产生子进程,
  父进程  ----sleep---------------------running-------->
                |                          |
              fork()-----exec()----------exit() ---->zombie码片

————————————————
版权声明:本文为CSDN博主「不淘气」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45961525/java/article/details/105538136

3、进程和线程

对于linux而言,不严格区分,对于进程和线程都将拥有独立的一套完整资源集(内存---->虚拟内存,CPU------>时间片)。
在这里插入图片描述

4、进程管理工具

(1)pstree:用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出是谁创建了谁。(Centos5/6: init ____ Centos7:systemd)
安装方法及选项:

  [root@centos-node1 ~]# yum provides pstree      //查找 pstree包
  [root@centos-node1 ~]# yum install psmisc	     //找准位置安装

 -A: 用途,当终端不支持UTF-8(中文),显示乱码,此时用该参数。
 -U:各进程树之间的连接以utf8字符来链接,某些终端可能会有错
 -p:列出pid
 -u:列出每个进程所属账号名称

例:

[root@centos-node1 ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─login───bash
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash───pstree   //本终端下的进程
        │      └─sshd───sftp-server
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───{vmtoolsd}

[root@centos-node1 ~]# pstree -p    //列出PID
systemd(1)─┬─NetworkManager(7333)─┬─dhclient(8303)
           │                      ├─{NetworkManager}(7342)
           │                      └─{NetworkManager}(7344)
           ├─VGAuthService(6688)
           ├─auditd(6160)───{auditd}(6166)
           ├─crond(6943)
           ├─dbus-daemon(6728)───{dbus-daemon}(6871)
           ├─firewalld(6970)───{firewalld}(7608)
           ├─login(8081)───bash(8088)
           ├─lvmetad(3534)
           ├─master(7933)─┬─pickup(7934)
           │              └─qmgr(7935)
           ├─polkitd(6673)─┬─{polkitd}(6830)
           │               ├─{polkitd}(6884)
           │               ├─{polkitd}(6893)
           │               ├─{polkitd}(6896)
           │               ├─{polkitd}(6909)
           │               └─{polkitd}(6962)
           ├─rsyslogd(7804)─┬─{rsyslogd}(8062)
           │                └─{rsyslogd}(8064)
           ├─sshd(7800)─┬─sshd(8104)───bash(8110)───pstree(8496)
           │            └─sshd(8108)───sftp-server(8127)
           ├─systemd-journal(3510)
           ├─systemd-logind(6722)
           ├─systemd-udevd(3545)
           ├─tuned(7802)─┬─{tuned}(8043)
           │             ├─{tuned}(8044)
           │             ├─{tuned}(8045)
           │             └─{tuned}(8060)
           └─vmtoolsd(6696)───{vmtoolsd}(6964)
[root@centos-node1 ~]# pstree -u    //列出每个进程所属账号名称
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon(dbus)───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─login───bash
        ├─lvmetad
        ├─master─┬─pickup(postfix)
        │        └─qmgr(postfix)
        ├─polkitd(polkitd)───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash───pstree
        │      └─sshd───sftp-server
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───{vmtoolsd}

(2)ps命令
ps --help <simple|list|output|threads|misc|all>
ps --help <s|l|o|t|m|a>

选项功能
-A所有进程都显示出来,与-e具有同样的效用
-a显示终端机下的进程,包括其他用户
-u以用户为 主的进程状态
x除了TTY控制的其他进程

输出格式规划:
l:较长、较详细地将该PID的信息列出
j:工作格式
-f:打印完整输出

例:

[root@centos-node1 ~]# ps -a
   PID TTY          TIME CMD
  9139 pts/0    00:00:00 ps
[root@centos-node1 ~]# ps -A
   PID TTY          TIME CMD
     1 ?        00:00:01 systemd
     2 ?        00:00:00 kthreadd
     3 ?        00:00:01 ksoftirqd/0
     5 ?        00:00:00 kworker/0:0H
     7 ?        00:00:00 migration/0
     8 ?        00:00:00 rcu_bh
     9 ?        00:00:01 rcu_sched
    10 ?        00:00:00 lru-add-drain
    11 ?        00:00:00 watchdog/0
    13 ?        00:00:00 kdevtmpfs
    14 ?        00:00:00 netns
    15 ?        00:00:00 khungtaskd
    16 ?        00:00:00 writeback
    ......

[root@centos-node1 tmp]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   8110   8104  0  80   0 - 28860 do_wai pts/0    00:00:00 bash
0 R     0   8521   8110  0  80   0 - 38309 -      pts/0    00:00:00 ps

F 代表这个进程的旗帜(flag)
S 代表这个进程的状态(STAT)
UID 代表执行者身份
PID 进程的ID号
C CPU使用的资源百分比
PRI 指进程的执行优先权
NI 进程的nice值,指执行的优先级的修正数值
ADDR 内核函数
SZ 使用掉的内存大小
WCHAN 进程是否在运行,-表示正在运行
TTY 登入者的终端机位置
TIME 使用掉的CPU时间
CMD 所下达的指令名称

[root@centos-node1 ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.7 128024  6544 ?        Ss   11:07   0:01 /usr/lib/syste
root          2  0.0  0.0      0     0 ?        S    11:07   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    11:07   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   11:07   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    11:07   0:00 [migration/0]

USER: 进程的发起者
PID:进程的ID号
%CPU:CPU使用百分比
%MEM:内存使用百分比
VSZ :虚拟内存
RSS :固定内存
TTY :终端
STAT: 状态 (S,T,R,Z)
START: 启动时间
TIME: 该进程实际使用CPU运作的时间
COMMAND: 指令

(3)pgrep:查看pid与进程名的对应

选项功能
-l同时显示进程名和PID
-o当匹配多个进程时,显示进程号最小的那个
-n当匹配多个进程时,显示进程号最大的那个

注意:进程号越大,并不一定意味着进程的启动时间越晚

[root@centos-node1 ~]# pgrep ssh    //默认只显示PID
7800
8104
8108
[root@centos-node1 ~]# pgrep -l ssh    //同时显示PID和进程名称
7800 sshd
8104 sshd
8108 sshd
[root@centos-node1 ~]# pgrep -l -n ssh    //当匹配多个进程时,显示进程号最大的那个
8108 ssh  
[root@centos-node1 ~]# pgrep -l -o ssh    //当匹配多个进程时,显示进程号最小的那个
7800 sshd

(4)killall ,kill ,pkill -----------通过发送信号的方式,对进程行为做控制
killall命令用于杀死指定名字的进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一。

选项功能
-z只杀死拥有scontext的进程
-e要求匹配进程名称
-I忽略小写
-g杀死进程组而不是进程
-i交互模式,杀死进程前先询问用户
-l列出所有的已知信号名称
-q不输出警告消息
-s发出指定的信号
-v报告信号是否发送成功
-w等待进程死亡
–help显示帮助信息
–version显示版本信息

语法格式:
kill [选项] [进程id]
-l 列出全部信号名称
-a 处理当前进程时不限制名里面和进程号的对应关系
-p 指定kill命令只打印相关进程的进程号,而不发送任何信息
-s 指定发送信号
-u 指定用户
实例:

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

0 ---->嗅探进程是否存在,不对其做任何操作
1 ---->断开终端
2 ---->中断,ctrl + c
3 ---->退出,ctrl + \
15 --->默认,终止
9  --->强制终止,
18 --->继续
19 --->暂停

实例:

[root@centos-node1 ~]# pgrep httpd
9182
9184
9185
9186
9187
9191
[root@centos-node1 ~]# kill 9191
[root@centos-node1 ~]# pgrep httpd
9182
9184
9185
9186
9187
9194
[root@centos-node1 ~]# kill 9186
[root@centos-node1 ~]# pgrep httpd
9182
9184
9185
9187
9194
9197
[root@centos-node1 ~]# kill 9182
[root@centos-node1 ~]# pgrep httpd
[root@centos-node1 ~]# systemctl start httpd
[root@centos-node1 ~]# pgrep httpd
9210
9230
9231
9232
9233
9234
[root@centos-node1 ~]# kill `pgrep -o httpd`
[root@centos-node1 ~]# pgrep httpd
[root@centos-node1 ~]# systemctl start httpd
[root@centos-node1 ~]# killall -0 httpd
[root@centos-node1 ~]# echo $?
0
[root@centos-node1 ~]# killall -15 httpd
[root@centos-node1 ~]# pgrep httpd
[root@centos-node1 ~]# systemctl start httpd
[root@centos-node1 ~]# pgrep httpd
9267
9268
9269
9270
9271
9272

实例2:通过开启两个端口,并执行ping命令来了解kill的用法与功能。

首先在1号端口上执行ping命令
[root@centos-node1 ~]# ping 192.168.229.134
PING 192.168.229.134 (192.168.229.134) 56(84) bytes of data.
64 bytes from 192.168.229.134: icmp_seq=1 ttl=64 time=0.295 ms
64 bytes from 192.168.229.134: icmp_seq=2 ttl=64 time=0.388 ms
64 bytes from 192.168.229.134: icmp_seq=3 ttl=64 time=0.286 ms
64 bytes from 192.168.229.134: icmp_seq=4 ttl=64 time=0.220 ms
64 bytes from 192.168.229.134: icmp_seq=5 ttl=64 time=0.492 ms
64 bytes from 192.168.229.134: icmp_seq=6 ttl=64 time=0.757 ms
我们再到2号端口上进行查看和kill命令操作
[root@centos-node1 ~]# ps -ef |grep ping
root       9306   9284  0 16:22 pts/1    00:00:00 ping 192.168.229.134
root       9308   8110  0 16:22 pts/0    00:00:00 grep --color=auto ping
[root@centos-node1 ~]# kill -2 9306  //中断指令,相当于ctrl + c
1号端口收到指令中断ping命令
64 bytes from 192.168.229.134: icmp_seq=31 ttl=64 time=0.282 ms

--- 192.168.229.134 ping statistics ---
31 packets transmitted, 31 received, 0% packet loss, time 30014ms
rtt min/avg/max/mdev = 0.220/0.350/0.757/0.114 ms
我们再次在1号端口运行运行ping命令
[root@centos-node1 ~]# ping 192.168.229.134
PING 192.168.229.134 (192.168.229.134) 56(84) bytes of data.
64 bytes from 192.168.229.134: icmp_seq=1 ttl=64 time=0.250 ms
64 bytes from 192.168.229.134: icmp_seq=2 ttl=64 time=0.307 ms
64 bytes from 192.168.229.134: icmp_seq=3 ttl=64 time=0.316 ms
64 bytes from 192.168.229.134: icmp_seq=4 ttl=64 time=0.265 ms

在2号端口进行查看和kill命令
[root@centos-node1 ~]# ps -ef |grep ping
root       9310   9284  0 16:24 pts/1    00:00:00 ping 192.168.229.134
root       9312   8110  0 16:24 pts/0    00:00:00 grep --color=auto ping
[root@centos-node1 ~]# kill -3 9310     //退出指令,相当于ctrl + \
回到1号端口
64 bytes from 192.168.229.134: icmp_seq=22 ttl=64 time=0.789 ms
64 bytes from 192.168.229.134: icmp_seq=23 ttl=64 time=0.306 ms
23/23 packets, 0% loss, min/avg/ewma/max = 0.193/0.348/0.367/0.866 ms    //相当于退出一次,然后继续执行
64 bytes from 192.168.229.134: icmp_seq=24 ttl=64 time=0.393 ms
64 bytes from 192.168.229.134: icmp_seq=25 ttl=64 time=0.263 ms

2号端口:
[root@centos-node1 ~]# kill -19 9310    //暂停指令
1号端口:
64 bytes from 192.168.229.134: icmp_seq=41 ttl=64 time=0.292 ms
64 bytes from 192.168.229.134: icmp_seq=42 ttl=64  time=0.287 ms

[1]+  Stopped                 ping 192.168.229.134
2号端口:
[root@centos-node1 ~]# kill -18 9310    //继续指令
1号端口:
[root@centos-node1 ~]# 64 bytes from 192.168.229.134: icmp_seq=43 ttl=64 time=0.367 ms
64 bytes from 192.168.229.134: icmp_seq=44 ttl=64 time=0.311 ms
64 bytes from 192.168.229.134: icmp_seq=45 ttl=64 time=0.271 ms
64 bytes from 192.168.229.134: icmp_seq=46 ttl=64 time=0.230 ms
64 bytes from 192.168.229.134: icmp_seq=47 ttl=64 time=0.290 ms

(5)top:动态的打印系统信息
在这里插入图片描述

top前5行统计信息

第一行:top - 18:09:44 up 7:03, 3 users, load average: 0.00, 0.01, 0.05

内容含义
18:09:44表示当前时间
up 7:03系统运行时间 格式为时:分
3 users当前登录用户数
load average: 0.00, 0.01, 0.05系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

注:load average: 如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行:Tasks: 174 total, 2 running, 172 sleeping, 0 stopped, 0 zombie
第三行:%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

内容含义
174 total进程总数
2 running正在运行的进程数
172 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数
0.0 us用户空间占用CPU百分比
0.0 sy内核空间占用CPU百分比
0.0 ni用户进程空间内改变过优先级的进程占用CPU百分比
100.0 id空闲CPU百分比
0.0 wa等待输入输出的CPU时间百分比
0.0 hi硬中断(Hardware IRQ)占用CPU的百分比
0.0 si软中断(Software Interrupts)占用CPU的百分比

第四行:KiB Mem : 929944 total, 135644 free, 161648 used, 632652 buff/cache
第五行:KiB Swap: 2002940 total, 2002676 free, 264 used. 566868 avail Mem

内容含义
KiB Mem : 929944 total物理内存总量
135644 free空闲内存总量
161648 used使用的物理内存总量
632652 buff/cache用作内核缓存的内存量
KiB Swap: 2002940 total交换区总量
2002676 free空闲交换区总量
264 used使用的交换区总量
566868 avail Mem代表可用于进程下一次分配的物理内存数量
cached Mem缓冲的交换区总量

缓冲的交换区总量:即内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

进程信息
列名含义
PID进程id
PPID父进程id
RUSER-Real user name-
UID进程所有者的用户id
USER进程所有者的用户名
GROUP进程所有者的组名
TTY启动进程的终端名。不是从终端启动的进程则显示为 ?
PR优先级
NInice值。负值表示高优先级,正值表示低优先级
P最后使用的CPU,仅在多CPU环境下有意义
%CPU上次更新到现在的CPU时间占用百分比
TIME进程使用的CPU时间总计,单位秒
TIME+进程使用的CPU时间总计,单位1/100秒
%MEM进程使用的物理内存百分比
VIRT程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP程使用的虚拟内存中,被换出的大小,单位kb
RES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE可执行代码占用的物理内存大小,单位kb
DATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR共享内存大小,单位kb
nFLT页面错误次数
nDRT最后一次写入到现在,被修改过的页面数
S进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
COMMAND命令名/命令行
WCHAN若该进程在睡眠,则显示睡眠中的系统函数名
Flags任务标志
  • 在top基本视图中,按键盘数字“1”可以监控每个逻辑CPU的状况:
  • 敲击键盘‘b’(打开关闭加亮效果)
  • 敲击键盘‘x’(打开/关闭排序列的加亮效果)
  • 改变进程显示字段

在top基本视图中,敲击”f”进入另一个视图,在这里可以编辑基本视图中的显示字段

  h|?帮助
  M 按内存的使用排序
  P 按CPU使用排序
  N 以PID的大小排序
  R 对排序进行反转
  f 自定义显示字段
  1 显示所有CPU的负载
  < 向前
  > 向后
  z 彩色
  W 保存top环境设置

(6)htop:top的增强版
epel 源
yum install epel*
yum install htop
下载扩展源,安装htop。
在这里插入图片描述
(7)vmstat
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用
率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参
数是采样的次数,如:

[root@centos-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 386892   2108 380452    0    0    13     3   51   97  0  0 100  0  0
[root@centos-node1 ~]# vmstat 2 1
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 386900   2108 380488    0    0    13     2   51   97  0  0 100  0  0
[root@centos-node1 ~]# vmstat 2 5
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 386900   2108 380492    0    0    13     2   51   97  0  0 100  0  0
 0  0      0 386900   2108 380492    0    0     0     0   55   94  0  0 100  0  0
 1  0      0 386900   2108 380492    0    0     0     0   54   89  0  1 100  0  0
 0  0      0 386900   2108 380492    0    0     0     0   52   86  0  1 100  0  0
 0  0      0 386900   2108 380492    0    0     0     0   60   95  0  0 100  0  0

用法:vmstat [-V] [-n] [-S unit] [delay [count]]

选项功能
-V显示vmstat版本信息
-n只在开始时显示一次各字段名称
-a显示活跃和非活跃内存
-d显示各个磁盘相关统计信息
-D显示磁盘总体信息
-p显示指定磁盘分区统计信息
-s显示内存相关统计信息及多种系统活动数量
-m显示slabinfo
-t在输出信息的时候也将时间一并输出出来
-S使用指定单位显示。参数有k、K、m、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024bytes)
delay刷新时间间隔。如果不指定,只显示一条结果
count刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷
类别选项含义说明
Processr等待执行的任务数展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈
B等待IO的进程数量
Memoryswpd正在使用虚拟的内
存大小,单位k值大于0表示物理内存已经不足,需要考虑升级内存
free空闲内存大小指物理内存
buff已用的buff大小,对块设备的读写进行缓冲
cache已用的cache大小,文件系统的cache指的是page cached内存大小
nact非活跃内存大小,即被标明可回收的内存,区别于free和active具体含义见:概念补充(当使用-a选项时显示)
active活跃的内存大小具体含义见:概念补充(当使用-a选项时显示)
Swapsi每秒从交换区写入内存的大小(单位:kb/s)表示有磁盘调入内存,也就是内存进入内存交换区的内存大小;通俗的讲就是 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗存进程解决掉
so每秒从内存写到交换区的大小表示由内存进入磁盘,也就是由内存交换区进入内存的内存大小。
IObi每秒读取的块数(读磁盘)现在的Linux版本块的大小为1024bytes
bo每秒写入的块数(写磁盘)如果bi+bo的值过大,且wa值较大,则表示系统磁盘IO瓶颈
Systemin每秒中断数,包括时钟中断值越大,会看到由内核消耗的cpu时间会越多
cs每秒上下文切换数值越大,会看到由内核消耗的cpu时间会越多
CPUUs用户进程执行消耗cpu时间(usertime)us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
Sy系统进程消耗cpu时间(systemtime)sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。一般来说us+sy应该小于80%,如果大于80%,说明可能存在CPU瓶
Id空闲时间(包括IO等待时间)
wa等待IO时间Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

(8)sar :CPU资源监控

[root@centos-node1 ~]# sar -u 5 3
Linux 3.10.0-957.el7.x86_64 (centos-node1)      04/24/2020      _x86_64_        (1 CPU)

02:40:58 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
02:41:03 PM     all      0.61      0.00      1.62      0.00      0.00     97.78
02:41:08 PM     all      0.00      0.00      0.20      0.00      0.00     99.80
02:41:13 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.20      0.00      0.60      0.00      0.00     99.19

输出项说明:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于 nice 操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待 I/O 操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。

    1. 若 %iowait 的值过高,表示硬盘存在 I/O 瓶颈
    1. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
    1. 若 %idle 的值持续低于 1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。

inode、文件和其他内核表监控
例如,每 5秒采样一次,连续采样 3 次,观察核心表的状态。

[root@centos-node1 ~]# sar -v 5 3
Linux 3.10.0-957.el7.x86_64 (centos-node1)      04/24/2020      _x86_64_        (1 CPU)

02:44:40 PM dentunusd   file-nr  inode-nr    pty-nr
02:44:45 PM    119674      1344    110905         3
02:44:50 PM    119674      1344    110905         3
02:44:55 PM    119674      1344    110905         3
Average:       119674      1344    110905         3

输出项说明:
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的 pty 数量

内存和交换空间监控
例如,每 5秒采样一次,连续采样 3 次,监控内存分页:

[root@centos-node1 ~]# sar -r 5 3
Linux 3.10.0-957.el7.x86_64 (centos-node1)      04/24/2020      _x86_64_        (1 CPU)

02:39:57 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
02:40:02 PM    386272    543672     58.46      2108    226796    299616     10.22    116920    188520        28
02:40:07 PM    386272    543672     58.46      2108    226796    299616     10.22    116924    188520        28
02:40:12 PM    386272    543672     58.46      2108    226796    299616     10.22    116924    188520        28
Average:       386272    543672     58.46      2108    226796    299616     10.22    116923    188520        28

输出项说明:
kbmemfree:这个值和 free 命令中的 free 值基本一致,所以它不包括 buffer 和 cache 的空间.
kbmemused:这个值和 free 命令中的 used 值基本一致,所以它包括 buffer 和 cache 的空间.
%memused:这个值是 kbmemused 和内存总量(不包括 swap)的一个百分比.
kbbuffers 和 kbcached:这两个值就是 free 命令中的 buffer 和 cache.
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit:这个值是 kbcommit 与内存总量(包括 swap)的一个百分比.
内存分页监控
例如,每 5 秒采样一次,连续采样 3 次,监控内存分页:

[root@centos-node1 ~]# sar -B 5 3
Linux 3.10.0-957.el7.x86_64 (centos-node1)      04/24/2020      _x86_64_        (1 CPU)

02:48:47 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
02:48:52 PM      0.00      7.83     13.86      0.00     13.65      0.00      0.00      0.00      0.00
02:48:57 PM      0.00      0.00      5.22      0.00     10.44      0.00      0.00      0.00      0.00
02:49:02 PM      0.00      0.00   1792.99      0.00    854.51      0.00      0.00      0.00      0.00
Average:         0.00      2.61    604.82      0.00    293.24      0.00      0.00      0.00      0.00

输出项说明:
pgpgin/s:表示每秒从磁盘或 SWAP 置换到内存的字节数(KB)
pgpgout/s:表示每秒从内存置换到磁盘或 SWAP 的字节数(KB)
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
majflt/s:每秒钟产生的主缺页数.
pgfree/s:每秒被放入空闲队列中的页个数
pgscank/s:每秒被 kswapd 扫描的页个数
pgscand/s:每秒直接被扫描的页个数
pgsteal/s:每秒钟从 cache 中被清除来满足内存需要的页个数
%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
I/O 和传送速率监控
例如,每 5 秒采样一次,连续采样 3 次,报告缓冲区的使用情况,需键入如下命令:

[root@centos-node1 ~]# sar -b 5 3
Linux 3.10.0-957.el7.x86_64 (centos-node1)      04/24/2020      _x86_64_        (1 CPU)
02:50:24 PM       tps      rtps      wtps   bread/s   bwrtn/s
02:50:29 PM      0.00      0.00      0.00      0.00      0.00
02:50:34 PM      1.00      0.00      1.00      0.00      8.03
02:50:39 PM      0.20      0.00      0.20      0.00      3.22
Average:         0.40      0.00      0.40      0.00      3.75

输出项说明:
tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s

进程队列长度和平均负载状态监控
例如,每 5 秒采样一次,连续采样 3 次,监控进程队列长度和平均负载状态:

[root@centos-node1 ~]# sar -q 5 3
Linux 3.10.0-957.el7.x86_64 (centos-node1)      04/24/2020      _x86_64_        (1 CPU)

02:50:45 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
02:50:50 PM         1       185      0.00      0.01      0.05         0
02:50:55 PM         1       185      0.00      0.01      0.05         0
02:51:00 PM         1       185      0.00      0.01      0.05         0
Average:            1       185      0.00      0.01      0.05         0

输出项说明:
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后 1 分钟的系统平均负载(System load average)
ldavg-5:过去 5 分钟的系统平均负载
ldavg-15:过去 15 分钟的系统平均负载
系统交换活动信息监控
例如,每 5 秒采样一次,连续采样 3 次,监控系统交换活动信息:

[root@centos-node1 ~]# sar -w 5 3
Linux 3.10.0-957.el7.x86_64 (centos-node1)      04/24/2020      _x86_64_        (1 CPU)

02:53:21 PM    proc/s   cswch/s
02:53:26 PM      0.80     92.57
02:53:31 PM      0.80     97.99
02:53:36 PM      0.80     96.59
Average:         0.80     95.72

输出项说明:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量

(9)tsar
淘宝开源,以周期计划任务的方式执行
安装
[root@bogon ~]# wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip
–no-check-certificate
[root@bogon ~]# yum install unzip
[root@bogon ~]# unzip tsar.zip
[root@bogon tsar-master]# cd tsar-master/
[root@bogon tsar-master]# make
[root@bogon tsar-master]# make install
常用命令
以 1 秒钟为间隔,实时打印 tsar 的概述数据

[root@centos-node1 ~]# tsar -i 1 -l
Time              ---cpu-- ---mem-- ---tcp-- -----traffic---- --sda--- --sr0--- --dm-0-- --dm-1--  ---load-
Time                util     util   retran    bytin  bytout     util     util     util     util     load1
24/04/20-14:59:23   1.01    35.35     0.00   256.00  382.00     2.80     0.00     2.80     0.00      0.00
24/04/20-14:59:24   0.00    35.35     0.00   316.00  334.00     0.00     0.00     0.00     0.00      0.00
24/04/20-14:59:25   1.00    35.35     0.00   316.00  302.00     0.00     0.00     0.00     0.00      
......

tsar 显示 1 天内的历史汇总(summury)信息,以默认 5 分钟为间隔

[root@centos-node1 tsar-master]# tsar
Time           ---cpu-- ---mem-- ---tcp-- -----traffic---- --sda--- --sr0--- --dm-0-- --dm-1--  ---load-
Time             util     util   retran    bytin  bytout     util     util     util     util     load1
24/04/20-08:50   1.20    23.58     0.00    41.00   42.00     0.16     0.00     0.16     0.00      0.03
24/04/20-08:55   0.13    23.59     0.00    11.00    0.00     0.10     0.00     0.10     0.00      0.00
24/04/20-09:00   0.13    23.60     0.00    13.00    0.00     0.12     0.00     0.12     0.00      0.00
......

tsar --cpu -i 1 显示一天内 cpu 的历史信息,以 1 分钟为间隔

[root@centos-node1 tsar-master]# tsar --cpu -i 1
Time           -----------------------cpu----------------------
Time             user     sys    wait    hirq    sirq    util
24/04/20-08:45   0.06    0.11    0.00    0.00    0.01    0.18
24/04/20-08:46   0.27    2.88    0.02    0.00    0.00    3.14
24/04/20-08:47   0.22    2.76    0.02    0.00    0.00    2.98
24/04/20-08:48   0.05    0.08    0.00    0.00    0.00    0.13
......

tsar --live --mem -i 2 以 2 秒钟为间隔,实时打印 mem 的数据。

[root@centos-node1 tsar-master]# tsar --live --mem -i 2
Time              -----------------------mem----------------------
Time                free    used    buff    cach   total    util
24/04/20-15:09:00 363.3M  321.2M    2.1M  221.6M  908.1M   35.37
24/04/20-15:09:02 362.9M  321.6M    2.1M  221.6M  908.1M   35.41
24/04/20-15:09:04 362.9M  321.6M    2.1M  221.6M  908.1M   35.41
......

tsar --cpu --mem -i 1 显示一天内的 cpu 和内存历史数据,以 1 分钟为间隔。

[root@centos-node1 tsar-master]# tsar --cpu --mem -i 1
Time           -----------------------cpu---------------------- -----------------------mem----------------------
Time             user     sys    wait    hirq    sirq    util     free    used    buff    cach   total    util
24/04/20-08:45   0.06    0.11    0.00    0.00    0.01    0.18   608.0M  209.0M    2.1M   89.0M  908.1M   23.02
24/04/20-08:46   0.27    2.88    0.02    0.00    0.00    3.14   606.8M  210.2M    2.1M   89.1M  908.1M   23.15
......

(11)lsof
lsof输出信息含义 在终端下输入lsof即可显示系统打开的文件。

[root@centos-node1 ~]# lsof
COMMAND     PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1         root  cwd       DIR              253,0       224         64 /
systemd       1         root  rtd       DIR              253,0       224         64 /
systemd       1         root  txt       REG              253,0   1616360   16968336 /usr/lib/systemd/systemd
......

COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述,应用程序通过文件描述符识别该文件
TYPE:文件类型
DEVICE:指定磁盘的名称
NODE:索引节点
NAME:打开文件的确切名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值