Linux(进程相关管理工具)

后面也会持续更新,学到新东西会在其中补充。

建议按顺序食用,欢迎批评或者交流!

缺什么东西欢迎评论!我都会及时修改的!

在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频

王晓春老师的个人空间-王晓春老师个人主页-哔哩哔哩视频


进程树pstree

yum -y install psmisc

[root@RockyLinux9 ~]#pstree -p
systemd(1)─┬─NetworkManager(750)─┬─{NetworkManager}(755)
           │                     └─{NetworkManager}(758)
           ├─agetty(793)
           ├─atd(788)
           ├─auditd(687)─┬─sedispatch(689)
           │             ├─{auditd}(688)
           │             └─{auditd}(690)
           ├─automount(947)─┬─{automount}(970)
           │                ├─{automount}(971)
           │                ├─{automount}(972)
           │                ├─{automount}(1036)
           │                └─{automount}(1042)
           ├─chronyd(733)
           ├─containerd(784)─┬─{containerd}(809)
           │                 ├─{containerd}(810)
           │                 ├─{containerd}(818)
           │                 ├─{containerd}(820)
           │                 ├─{containerd}(846)
           │                 ├─{containerd}(862)
           │                 └─{containerd}(1830)
           ├─crond(1043)
           ├─dbus-broker-lau(720)───dbus-broker(721)
           ├─dockerd(950)─┬─{dockerd}(1101)
           │              ├─{dockerd}(1102)
           │              ├─{dockerd}(1103)
           │              ├─{dockerd}(1106)
           │              ├─{dockerd}(1205)
           │              ├─{dockerd}(1262)
           │              ├─{dockerd}(1263)
           │              ├─{dockerd}(1339)
           │              ├─{dockerd}(1340)
           │              └─{dockerd}(1345)
           ├─firewalld(724)───{firewalld}(928)
           ├─irqbalance(725)───{irqbalance}(731)
           ├─lsmd(726)
           ├─mcelog(727)
           ├─polkitd(853)─┬─{polkitd}(886)
           │              ├─{polkitd}(887)
           │              ├─{polkitd}(891)
           │              ├─{polkitd}(892)
           │              └─{polkitd}(922)
           ├─rsyslogd(954)─┬─{rsyslogd}(1022)
           │               └─{rsyslogd}(1025)
           ├─sshd(778)─┬─sshd(1769)───sshd(1787)───bash(1789)───pstree(1861)
           │           └─sshd(1773)───sshd(1788)───sftp-server(1790)
           ├─systemd(1776)───(sd-pam)(1778)
           ├─systemd-journal(611)
           ├─systemd-logind(729)
           ├─systemd-udevd(625)
           └─tuned(780)─┬─{tuned}(1254)
                        ├─{tuned}(1267)
                        └─{tuned}(1270)

 进程的信息ps

process state 可以显示当前进程的状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proce/PID目录下的各文件中。

  • -e 显示所有进程,相当于-A
  • -f 显示完整格式程序信息 

常用指令ps aux / ps -ef

-e 是 ax 的组合

查看进程个数 

[root@RockyLinux9 ~]#ps aux | wc -l
225

ps aux详细参数 

  • PID 进程ID
  • %CPU 占用CPU百分比
  • %MEM 占用内存百分比
  • VSZ 操作系统承诺给你的内存
  • RSS 真正占用的物理内存空间
  • TTY 终端
  • STAT 状态
  • START 什么时间启动的 
  • TIME 累积的CPU分配时间

 ps -ef详细参数

  • UID 用户 
  • PID 进程ID
  • PPID 父进程ID
  • C   占用CPU百分比
  • STIME 启动时间
  • TTY 终端
  • TIME TIME 累积的CPU分配时间

 ps -ef 没有 ps aux显示的全并且居然没有显示内存的信息。

ps auxf显示进程之间的父子关系

 o可以选择想要显示的

[root@RockyLinux9 ~]#ps axo pid,cmd,%mem,%cpu
    PID CMD                         %MEM %CPU
      1 /usr/lib/systemd/systemd rh  0.9  0.0
      2 [kthreadd]                   0.0  0.0
........

查看进程CPU利用率

窗口1:

[root@RockyLinux9 ~]#dd if=/dev/zero of=/dev/null

窗口2:

[root@RockyLinux9 ~]#ps aux

 对于某一列进行排序 -k / --sort

按照%CPU排序从小到大排序

[root@RockyLinux9 ~]#ps axo pid,cmd,%cpu,%mem k %cpu
    PID CMD                         %CPU %MEM
      1 /usr/lib/systemd/systemd rh  0.0  0.9
      2 [kthreadd]                   0.0  0.0
      3 [pool_workqueue_]            0.0  0.0
....
   1929 [kworker/0:1-mm_percpu_wq]   0.8  0.0
   1972 dd if=/dev/zero of=/dev/nul 94.4  0.1

按照%CPU排序从大到小排序

[root@RockyLinux9 ~]#ps axo pid,cmd,%cpu,%mem k -%cpu
    PID CMD                         %CPU %MEM
   1972 dd if=/dev/zero of=/dev/nul 97.4  0.1
   1929 [kworker/0:1-events]         0.9  0.0
....

按照内存排序从小到大

[root@RockyLinux9 ~]#ps axo pid,cmd,%cpu,%mem k %mem

按照内存排序从大到小

[root@RockyLinux9 ~]#ps axo pid,cmd,%cpu,%mem k -%mem

euser 有效用户 ruser真正的用户

suid权限 因为passwd普通用户不能执行只能root用户执行

第一个窗口
[root@RockyLinux9 ~]#su - wang
[wang@RockyLinux9 ~]$passwd
Changing password for user wang.
Current password:
第二个窗口
[root@RockyLinux9 ~]#ps axo pid,cmd,%cpu,%mem,user,euser,ruser
2016 passwd                       0.0  0.3 root     root     wang
                                                   有效用户  真实用户
[root@RockyLinux9 ~]#ps axo pid,cmd,%cpu,%mem,user,euser,ruser | grep passwd
   2016 passwd                       0.0  0.3 root     root     wang

查看进程信息prtstat

显示进程更为详细的信息,来自psmisc包

[wang@RockyLinux9 ~]$rpm -qf `which prtstat`
psmisc-23.4-3.el9.x86_64
[wang@RockyLinux9 ~]$prtstat `pidof ping`
Process: ping                   State: S (sleeping) 状态
  CPU#:  0 运行在0号CPU上             TTY: 136:1终端      Threads: 1 线程
Process, Group and Session IDs
  Process ID: 2034                Parent ID: 1924
    Group ID: 2034               Session ID: 1924
  T Group ID: 2034

Page Faults
  This Process    (minor major):      167         3
  Child Processes (minor major):        0         0
CPU Times
  This Process    (user system guest blkio):   0.00   0.03   0.00   0.00
  Child processes (user system guest):         0.00   0.00   0.00
Memory
  Vsize:       7794 kB 操作系统给的虚拟内存
  RSS:         2883 kB 实际内存                  RSS Limit: 18446744073709 MB
  Code Start:  0x1      程序段开始                 Code Stop:  0x1  程序段寇尔斯基
  Stack Start: 0        栈开始
  Stack Pointer (ESP):          0        Inst Pointer (EIP):          0
    栈指针
Scheduling
  Policy: normal
  Nice:   0              RT Priority: 0 (non RT)
 -20~19                 优先级属于非实时优先级

调整进程优先级nice

只能调整非实时优先级 只能在100~139

nice 命令的值是 -20~19 之间

外部命令
[wang@RockyLinux9 ~]$type nice
nice is /usr/bin/nice

-n 指定优先级来启动

 -n, --adjustment=N   add integer N to the niceness (default 10)

[root@RockyLinux9 ~]#nice -n -10 ping 127.0.0.1
[wang@RockyLinux9 ~]$ps axo pid,cmd,nice
........
   2117 ping 127.0.0.1              -10
   2118 ps axo pid,cmd,nice           0

renice可以调整正在执行中的进程优先级

[root@RockyLinux9 ~]#renice -n -20 2117
2117 (process ID) old priority -10, new priority -20
                      老优先级            新优先级

 调整成功!

[root@RockyLinux9 ~]#ps axo pid,cmd,nice
.......
   2117 ping 127.0.0.1              -20
   2119 [kworker/1:2-events_freezab   0
   2122 ps axo pid,cmd,nice           0

就算调到30也最高也只能是19

[root@RockyLinux9 ~]#renice -n 30 2117
2117 (process ID) old priority -20, new priority 19
[root@RockyLinux9 ~]#ps axo pid,cmd,nice | grep ping
   2117 ping 127.0.0.1               19
   2141 grep --color=auto ping        0

nice值越高,好人的优先级越低,和现实交相辉映了属于是。

ni:nice值

pri:priority优先级 0~139

 数据越大优先级越高139最高0最低

139-40 实时优先级 39-0 非实时优先级

正负优先级傻傻分不清楚

设置的是-10优先级居然给的是10优先级

窗口1
[root@RockyLinux9 ~]#nice -10 ping 127.0.0.1
窗口2
[root@RockyLinux9 ~]#ps axo pid,cmd,ni,pri | grep ping
   2163 ping 127.0.0.1               10   9

负负得负等于负数

窗口1
[root@RockyLinux9 ~]#nice --10 ping 127.0.0.1
窗口2
[root@RockyLinux9 ~]#ps axo pid,cmd,ni,pri | grep ping
   2168 ping 127.0.0.1              -10  29

得出的结论和man帮助不一样 帮助也不一定是对的

[root@RockyLinux9 ~]#man ps

 查找进程和CPU的绑定关系

[root@RockyLinux9 ~]#ps axo pid,cmd,ni,pri,psr

 进程和CPU不是固定的绑定关系,会变慢了。

会带来CPU缓冲区里面的缓冲数据的失效

为什么?

0号CPU缓存的你的信息这个时候你跳到了1号CPU上1号CPU上没缓存你的信息。

又得重新读一遍,这个过程就会消耗时间!

上篇文章也详细解释过了!

[root@RockyLinux9 ~]#lscpu

 大概结构是这样的 L3缓存是所有CPU共享的 三级缓存大但是慢!会影响效率

CPU的绑定

[root@RockyLinux9 ~]#type taskset
taskset is /usr/bin/taskset
[root@RockyLinux9 ~]#taskset --help
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]


Show or change the CPU affinity of a process.

Options:
 -a, --all-tasks         operate on all the tasks (threads) for a given pid
 -p, --pid               operate on existing given pid
 -c, --cpu-list          display and specify cpus in list format
 -h, --help              display this help
 -V, --version           display version

The default behavior is to run a new command:
    taskset 03 sshd -b 1024
You can retrieve the mask of an existing task:
    taskset -p 700
Or set it:
    taskset -p 03 700
List format uses a comma-separated list instead of a mask:
    taskset -pc 0,3,7-11 700
Ranges in list format can take a stride argument:
    e.g. 0-31:2 is equivalent to mask 0x55555555

For more details see taskset(1).

查看实时优先级

rtprio 实时优先级是40~139之间的 非实时优先级0~39之间的

[root@RockyLinux9 ~]#ps axo pid,cmd,ni,pri,psr,rtprio

普通进程没有对应的实时优先级

搜索进程pgrep/pidof

  • ps 选项 | grep 'pattern'
  • pgrep 
  • pidof 查看进程pid

 查看用户wang运行了哪些进程

窗口1
[root@RockyLinux9 ~]#su - wang
[wang@RockyLinux9 ~]$dd if=/dev/zero of=/dev/null
窗口2
[root@RockyLinux9 ~]#pgrep -au wang
2320 -bash
2344 dd if=/dev/zero of=/dev/null

查看终端上运行的进程

[wang@RockyLinux9 ~]$pgrep -at pts/1
1924 -bash
2168 ping 127.0.0.1

 pidof显示进程编号

-x 脚本名称查找pid

[wang@RockyLinux9 ~]$pidof bash
2320 2278 2228 1789

一个程序可以运行多个进程 bash有多个实例 每个实例对应一个进程。

负载查询uptime

单位是s

uptime 和 w 显示以下内容

  • 当前时间
  • 系统已启动的时间
  • 当前上线人数
  • 系统平均负责(1、5、15的平均负载,一般不会超过1,超过5时建议报警)

w的第一行和uptime第一行都是一样的

[wang@RockyLinux9 ~]$uptime
 19:12:06 up  3:40,  3 users,  load average: 0.00, 0.02, 0.00
19:12:06  系统当前时间
 up  3:40 运行了3小时
 3 users  当前系统有3个用户
load average: 0.00, 0.02, 0.00 平均负载1、5、15 越小代表越空闲

如:Linux主机1个双核CPU,当Load Average为6的时候说明机器已经被充分使用。

第一个窗口
[wang@RockyLinux9 ~]$dd if=/dev/zero of=/dev/null
第二个窗口
[wang@RockyLinux9 ~]$dd if=/dev/zero of=/dev/null
第三个窗口
[root@RockyLinux9 ~]#uptime

逐步增长!
[root@RockyLinux9 ~]#uptime
 19:23:23 up  3:52,  4 users,  load average: 0.39, 0.12, 0.03
[root@RockyLinux9 ~]#uptime
 19:23:28 up  3:52,  4 users,  load average: 0.51, 0.15, 0.04
[root@RockyLinux9 ~]#uptime
 19:23:34 up  3:52,  4 users,  load average: 0.63, 0.18, 0.05
[root@RockyLinux9 ~]#uptime
 19:24:17 up  3:52,  4 users,  load average: 1.36, 0.44, 0.14
[root@RockyLinux9 ~]#uptime
 19:24:37 up  3:53,  4 users,  load average: 1.54, 0.54, 0.19
[root@RockyLinux9 ~]#uptime
 19:25:10 up  3:53,  6 users,  load average: 2.12, 0.78, 0.28
[root@RockyLinux9 ~]#uptime
 19:25:12 up  3:53,  6 users,  load average: 2.27, 0.83, 0.30
[root@RockyLinux9 ~]#cat /proc/uptime
14107.51 27137.41
 开机时间 空闲时间

空闲时间为什么比开机时间长呢?以CPU个数计算,一个CPU单独计算,两个CPU乘以开机时间才是总时间,除以双CPU的总时间。求出系统空闲的百分比

[root@RockyLinux9 ~]#echo 14107.51*2/27137.41 | bc
1

为1说明CPU特别空闲。

显示CPU相关统计mpstat

来自于sysstat包

[root@RockyLinux9 ~]#yum -y install sysstat

[root@RockyLinux9 ~]#mpstat
Linux 5.14.0-503.15.1.el9_5.x86_64 (RockyLinux9)        12/16/2024      _x86_64_        (2 CPU)
                   
07:40:22 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:40:22 PM  all    1.50    0.00    3.11    0.01    0.18    0.10    0.00    0.00    0.00   95.09
  • %usr 用户空间占用
  • %nice 调整优先级
  • %sys 是内核空间/系统空间
  • %iowait io等待
  • %irq 中断
  • %soft 软中断
  • %idle 空闲
  • %steal 对于当前的Linux来说所有时间是可以统计出来的,但有一个时间不好统计,就是被虚拟机里面的程序占用的CPU时间片,比如vmware里面运行了很多程序,windows查看不了vmware里面运行了什么比如虚拟机里面运行了一个shell脚本,虚拟机的进程也会消耗CPU,虚拟机占用的CPU就称为盗取的时间片。 KVM是Linux的虚拟化技术可以在Linux系统上跑虚拟机

动态观察mpstat 1

[root@RockyLinux9 ~]#mpstat 1
Linux 5.14.0-503.15.1.el9_5.x86_64 (RockyLinux9)        12/16/2024      _x86_64_        (2 CPU)

07:43:43 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:43:44 PM  all   14.37    0.00   25.15    0.00    1.20    0.00    0.00    0.00    0.00   59.28
07:43:45 PM  all   14.04    0.00   26.32    0.00    0.58    0.58    0.00    0.00    0.00   58.48
07:43:46 PM  all   14.20    0.00   26.04    0.00    1.18    0.00    0.00    0.00    0.00   58.58
07:43:47 PM  all   14.66    0.00   32.46    0.00    1.05    0.00    0.00    0.00    0.00   51.83

隔两秒收集一次一共收集6次

[root@RockyLinux9 ~]#mpstat 2 6

查看进程实时状态top

第一条命令和uptime一样。

top - 19:59:28 up  4:28,  3 users,  load average: 1.00, 1.00, 1.00

 235个任务 2个正在运行 233个正在睡眠 0个停止 0个僵尸进程

Tasks: 235 total,   2 running, 233 sleeping,   0 stopped,   0 zombie

CPU使用比例 us 用户空间利用率 sy 内核空间利用率 ni 优先级利用率 id 空闲利用率 

wa 等待IO hi 硬中断 si 软中断 st 被盗取的时间片

%Cpu(s): 15.8 us, 26.9 sy,  0.0 ni, 56.1 id,  0.0 wa,  0.9 hi,  0.2 si,  0.0 st

内存的使用情况

MiB Mem :   1741.9 total,    846.3 free,    520.9 used,    530.7 buff/cache

swap使用情况

MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.   1221.0 avail Mem

进程PID 用户 PR 实时优先级 NI 非实时优先级 VIRT 虚拟内存操作系统给的 RES 实际内存

S 状态 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND

按照CPU利用率最高的这几个进程(默认)shift + p

输入大M按照内存利用率排 shift + m

 累计占用时间片的Time排序 shift + t

 隐藏top的第一行 l

 显示各个CPU的情况 1

 退出q

htop

htop 来自于EPEL源

[root@RockyLinux9 ~]#yum -y install htop

free 内存空间

free -h

[root@RockyLinux9 ~]#free -h
               total        used        free      shared  buff/cache   available
Mem:           1.7Gi       523Mi       821Mi       6.0Mi       558Mi       1.2Gi
Swap:          4.0Gi          0B       4.0Gi

echo 3 > /proc/sys/vm/drop_caches 清理缓存大小没有意义buffer/cache本身就是为了提高效率

/proc/sys/vm/drop_caches 默认值是0 改了的话就不能改回去了,要改回去就需要重启

[root@RockyLinux9 ~]#free -h
               total        used        free      shared  buff/cache   available
Mem:           1.7Gi       523Mi       821Mi       6.0Mi       558Mi       1.2Gi
Swap:          4.0Gi          0B       4.0Gi
[root@RockyLinux9 ~]#echo 3 > /proc/sys/vm/drop_caches
[root@RockyLinux9 ~]#free -h
               total        used        free      shared  buff/cache   available
Mem:           1.7Gi       480Mi       1.2Gi       6.0Mi       170Mi       1.2Gi
Swap:          4.0Gi          0B       4.0Gi

进程对应的内存映射pmap

maps里面存放的就算进程的内存分配情况

[root@RockyLinux9 ~]#cat /proc/1/maps
[root@RockyLinux9 ~]#pmap 1(进程编号)

 dd 命令本身程序并不占用特别多大内存

所以一个程序为什么说占的空间比较大 ,并不程序自身占用空间,还有分配空间存放全局变量BSS栈,堆。

 strace 

查看一个程序运行过程的系统调用

[root@RockyLinux9 ~]#dnf install -y strace
[root@RockyLinux9 ~]#strace ls

 ltrace

显示语言库调用

[root@RockyLinux9 ~]#yum -y install ltrace
[root@RockyLinux9 ~]#ltrace ls

这两个可以观察程序的逻辑发现程序逻辑问题,以免被甩锅。

 虚拟内存信息vmstat

描述的是虚拟内存的使用情况

[root@RockyLinux9 ~]#vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1033264      0 394988    0    0    17     4  166   59  4  9 87  0  0

r 和 b 表示进程的状态 r 表示正在运行b表示不可中断睡眠的进程

si(input) 交换进的  so(output) 交换出的 参照物为内存

此时是输入变大还是输出变大呢? 

申请2G内存
[root@RockyLinux9 ~]#dd if=/dev/zero of=/dev/null bs=2G count=1

我当时理解是输入变大实际上是输出变大。

[wang@RockyLinux9 ~]$vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 135972  78960      0  81872   52 12820  1472 12926 1464  292  0 64 36  1  0
 1  1 268108  54032      0  46156  216 128928  1796 128928 13099 1183  0 95  3  2  0
 2  1 426036  54892      0  47100  148 160152  1128 160152 15032  849  0 95  2  4  0
 2  0 585480  64216      0  47444    0 160572     0 160572 14759  933  0 94  2  4  0
 2  0 736712  74924      0  48536  276 151932  1372 151932 14744  840  0 96  2  3  0
 0  0 151652 1511640      0  51148 1196 73076  4332 73078 6814 1244  0 46 50  4  0

内存不足要把内存中暂时不用的数据放到swap里面,那么写入应该是对的啊为啥增长的是输出。

因为si so参考的是内存,内存不足需要放到swap也就是输出到swap,那么so变大没问题!

io 指的是磁盘的io 参照物也是内存 

从磁盘读数据到内存
[wang@RockyLinux9 ~]$dd if=/dev/sda of=/dev/null

bi 增长了

往磁盘中文件写数据
[root@RockyLinux9 ~]#dd if=/dev/zero of=/data/f1.img bs=1M count=1024

bo增长

 in:interrupts 中断速率,包括时钟

cs:context switch 进程切换速率

如果进程切换过于频繁,大量消耗CPU缓存失效。切换不要太频繁。

中断是硬件或者软件和CPU通讯的一种机制,比如敲个字母会向CPU发信号。中断说白了就算打断了CPU的正常执行。不中断进程等时间片等太久,通过中断能够及时发信号。

-s 汇总内存的使用情况

[wang@RockyLinux9 ~]$vmstat -s
      1783676 K total memory
       379460 K used memory
        63708 K active memory
      1380772 K inactive memory
       106496 K free memory
       314704 K buffer memory
      1133308 K swap cache
      4194300 K total swap
       150372 K used swap
      4043928 K free swap
       228524 non-nice user cpu ticks
          242 nice user cpu ticks
       438483 system cpu ticks
      4019351 idle cpu ticks
          384 IO-wait cpu ticks
        17946 IRQ cpu ticks
         5043 softirq cpu ticks
            0 stolen cpu ticks
      4563886 pages paged in
      4798981 pages paged out
         5782 pages swapped in
       374349 pages swapped out
      8575640 interrupts
      2704532 CPU context switches
   1734334278 boot time
         3348 forks

统计CPU和设备IO信息iostat

此工具由sysstat提供

[root@RockyLinux9 ~]#yum -y install sysstat
[root@RockyLinux9 ~]#iostat
机器信息
Linux 5.14.0-503.15.1.el9_5.x86_64 (RockyLinux9)        12/17/2024      _x86_64_        (2 CPU)
CPU消耗信息
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.00    0.02   13.69    1.29    0.00   81.00
硬盘使用情况
Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda              55.83      3473.24       204.23         0.00     488650      28733          0
sdb               0.71        17.60         0.00         0.00       2476          0          0
sdc               0.71        17.60         0.00         0.00       2476          0          0
sr0               0.38        14.90         0.00         0.00       2096          0          0
  • tps 每秒钟处理的事务所谓事务可以称为事件,有几个事件在执行。
  • KB_read/s 每秒钟读取的字节数
  • KB_wrtn/s 每秒钟写的字节数
  • kB_dscd/s 每秒设备丢弃的数据量(字节数)
  • kB_read 读的总量
  • KB_wrtn 写的总量
  • kB_dscd 丢失的总量
窗口1
[root@RockyLinux9 ~]#dd if=/dev/sda of=/dev/null
窗口2
[root@RockyLinux9 ~]#iostat 1 10

 系统资源统计 dstat

dstat 用于替代 vmstat,iostat功能

[root@RockyLinux9 ~]#yum -y install dstat

 默认是不停执行

[root@RockyLinux9 ~]#man dstat
No manual entry for dstat

[root@RockyLinux9 ~]#rpm -ql pcp-system-tools

    CPU               磁盘           网络        swap        系统
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw
                        读写         读写        读写     中断  上下文

192.168.111.149
[root@CentOS7 ~]# ping -f -s 65507 192.168.111.5
192.168.111.5
[root@RockyLinux9 ~]#dstat

网络流量明显提高了! 

 防火墙可以屏蔽一些网络攻击

监控磁盘I/O iotop

想知道哪个进程导致磁盘繁忙

[root@RockyLinux9 ~]#yum -y install iotop

 很像top 命令啊

[root@RockyLinux9 ~]#iotop
TID  PRIO  USER     DISK READ DISK WRITE>    COMMAND
                      磁盘读     磁盘写

 显示网络带宽使用情况iftop

[root@RockyLinux9 ~]#dnf -y install iftop

[root@RockyLinux9 ~]#iftop

默认监听网卡 

 

TX RX 报文发和接总共多少 rates 频率

-n 以数字方式不做名词解析

[root@RockyLinux9 ~]#iftop -n

[root@CentOS7 ~]# ping -f -s 65507 192.168.111.5

 通过此命令就可以查看到哪些网络资源被某些远程主机消耗了

[root@RockyLinux9 ~]#iptables -A INPUT -s 192.168.111.149 -j REJECT

[root@CentOS7 ~]# ping -f -s 65507 192.168.111.5
[root@RockyLinux9 ~]#iptables -F
[root@RockyLinux9 ~]#iptables -A INPUT -s 192.168.111.149 -j DROP

 你发再多消息我都不回应你,太惨啦! 

drop 比 reject 更节省带宽

 查看网络实时吞吐量nload

[root@RockyLinux9 ~]#yum -y install nload

 左右方向键切换网卡

[root@CentOS7 ~]# ping -f -s 65507 192.168.111.5

[root@RockyLinux9 ~]#iptables -F
[root@RockyLinux9 ~]# nload

综合监控工具glances

实现远程监控

[root@RockyLinux9 ~]#yum info glances


[root@RockyLinux9 ~]#yum -y install glances
root@ubuntu18:~# apt  install glances

 两个机器上都得安装glances 

一个机器上启动glances作为服务器另一端作为glasses的客户端

RockyLinux9 客户端连接到服务器端  ubuntu18 服务器端

查看已有端口 

root@ubuntu18:~# ss -ntl
State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port
LISTEN   0         128           127.0.0.53%lo:53               0.0.0.0:*
LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*
LISTEN   0         128               127.0.0.1:6010             0.0.0.0:*
LISTEN   0         128                    [::]:22                  [::]:*
LISTEN   0         128                   [::1]:6010                [::]:*

glance开启服务器的时候自动打开一个固定的端口号,客户端就可以利用端口号连接过来和他通讯。进而获取服务器端的资源使用情况。

开启服务器端
root@ubuntu18:~# glances -s

root@ubuntu18:~# glances -s
Glances XML-RPC server is running on 0.0.0.0:61209
监听在61209这个端口

 连接到服务器端(监控)192.168.111.8的性能

[root@RockyLinux9 ~]#glances -c 192.168.111.8

 注意这里版本要匹配

[root@RockyLinux9 ~]#glances -c 192.168.111.8
Client and server not compatible: Client version: 3.3.1                                                                                                  / Server version: 2.11.1

 查看进程打开文件lsof

list open files 可以用来查看系统中文件的使用情况。通过文件的方式来观察系统一些信息。

[root@RockyLinux9 ~]#lsof | less

查看22端口是谁在使用

[root@RockyLinux9 ~]#lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     777 root    3u  IPv4  25735      0t0  TCP *:ssh (LISTEN)
sshd     777 root    4u  IPv6  25737      0t0  TCP *:ssh (LISTEN)
sshd    1764 root    4u  IPv4  30365      0t0  TCP RockyLinux9:ssh->192.168.111.1:57587 (ESTABLISHED)
sshd    1768 root    4u  IPv4  30386      0t0  TCP RockyLinux9:ssh->192.168.111.1:57589 (ESTABLISHED)
sshd    1782 root    4u  IPv4  30365      0t0  TCP RockyLinux9:ssh->192.168.111.1:57587 (ESTABLISHED)
sshd    1783 root    4u  IPv4  30386      0t0  TCP RockyLinux9:ssh->192.168.111.1:57589 (ESTABLISHED)
sshd    1823 root    4u  IPv4  30558      0t0  TCP RockyLinux9:ssh->192.168.111.1:57595 (ESTABLISHED)
sshd    1827 root    4u  IPv4  30583      0t0  TCP RockyLinux9:ssh->192.168.111.1:57597 (ESTABLISHED)
sshd    1829 root    4u  IPv4  30558      0t0  TCP RockyLinux9:ssh->192.168.111.1:57595 (ESTABLISHED)
sshd    1854 root    4u  IPv4  30583      0t0  TCP RockyLinux9:ssh->192.168.111.1:57597 (ESTABLISHED)

查看登录用户启动而系统启动的进程

也就是和终端相关的进程

[root@RockyLinux9 ~]#lsof /dev/pts/1
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1830 root    0u   CHR  136,1      0t0    4 /dev/pts/1
bash    1830 root    1u   CHR  136,1      0t0    4 /dev/pts/1
bash    1830 root    2u   CHR  136,1      0t0    4 /dev/pts/1
bash    1830 root  255u   CHR  136,1      0t0    4 /dev/pts/1

 指定进程号,可以查看该进程打开的文件

[root@RockyLinux9 ~]#ping www.baidu.com
[root@RockyLinux9 ~]#lsof -p `pidof ping`
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
ping    2139 root  cwd    DIR    8,3     4096       133 /root
ping    2139 root  rtd    DIR    8,3      270       128 /
ping    2139 root  txt    REG    8,3    78336    485348 /usr/bin/ping
ping    2139 root  mem    REG    8,3  2586930 100672391 /usr/lib/locale/en_US.utf8/LC_COLLATE
....

 ping指令实际上打开了很多文件比如调用第三方库

利用lsof恢复正在使用中误删除文件

 /var/log/messages 文件被 rsyslogd 976 所使用

[root@RockyLinux9 ~]#lsof /var/log/messages
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
rsyslogd 976 root    7w   REG    8,3  1639957 33805792 /var/log/messages
[root@RockyLinux9 ~]#tail -f anaconda-ks.cfg
part /boot --fstype="xfs" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=4096
....

[root@RockyLinux9 ~]#lsof anaconda-ks.cfg
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
tail    2151 root    3r   REG    8,3     1177 747234 anaconda-ks.cfg
anaconda-ks.cfg文件被进程tail(2151)所使用

呀误删除了这个anaconda-ks.cfg
[root@RockyLinux9 ~]#rm -rf anaconda-ks.cfg
[root@RockyLinux9 ~]#ls

 只要进程是可以恢复回来如果进程没了就彻底没了

[root@RockyLinux9 ~]#lsof | grep delete
dbus-brok  722                          dbus   12u      REG                0,1   2097152          2 /memfd:dbus-broker-log (deleted)
firewalld  732                          root    9u      REG                0,1      4096       1025 /memfd:libffi (deleted)
firewalld  732  928 gmain               root    9u      REG                0,1      4096       1025 /memfd:libffi (deleted)
tail      2151                          root    3r      REG                8,3      1177     747234 /root/anaconda-ks.cfg (deleted)

 删除的文件被tail 2151 占用

[root@RockyLinux9 ~]#pidof tail
2151
[root@RockyLinux9 ~]#ll /proc/`pidof tail`/fd
total 0
lrwx------. 1 root root 64 Dec 17 13:19 0 -> /dev/pts/0
lrwx------. 1 root root 64 Dec 17 13:19 1 -> /dev/pts/0
lrwx------. 1 root root 64 Dec 17 13:19 2 -> /dev/pts/0
lr-x------. 1 root root 64 Dec 17 13:19 3 -> '/root/anaconda-ks.cfg (deleted)'
lr-x------. 1 root root 64 Dec 17 13:19 4 -> anon_inode:inotify

 通过文件描述符找到文件

[root@RockyLinux9 ~]#cat /proc/`pidof tail`/fd/3
# Generated by Anaconda 34.25.4.9
# Generated by pykickstart v3.32
#version=RHEL9
# Use graphical install
graphical
repo --name="minimal" --baseurl=file:///run/install/sources/mount-0000-cdrom/minimal

%addon com_redhat_kdump --disable

%end

# Keyboard layouts
keyboard --xlayouts='us'
。。。。

 恢复成功!

[root@RockyLinux9 ~]#cat /proc/`pidof tail`/fd/3 > anaconda-ks.cfg
[root@RockyLinux9 ~]#ll
total 4
-rw-r--r--. 1 root root 1177 Dec 17 13:29 anaconda-ks.cfg

 CentOS 8新特性 cockpit

Cockpit 是 CentOS 8引入新特性,基于Web界面的应用。

[root@RockyLinux9 ~]#dnf -y install cockpit

[root@RockyLinux9 ~]#systemctl status cockpit.socket
○ cockpit.socket - Cockpit Web Service Socket
     Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; disabled; preset: disabled)
     Active: inactive (dead)
   Triggers: ● cockpit.service
       Docs: man:cockpit-ws(8)
     Listen: [::]:9090 (Stream)

inactive 无效的

启动 cockpit.socket 

root@RockyLinux9 ~]#systemctl enable --now cockpit.socket
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket →                                                                                 /usr/lib/systemd/system/cockpit.socket.
[root@RockyLinux9 ~]#systemctl status cockpit.socket
● cockpit.socket - Cockpit Web Service Socket
     Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; enabled; pr>
     Active: active (listening) since Tue 2024-12-17 13:46:13 CST; 18s a>
      Until: Tue 2024-12-17 13:46:13 CST; 18s ago
   Triggers: ● cockpit.service
       Docs: man:cockpit-ws(8)
     Listen: [::]:9090 (Stream)
    Process: 2277 ExecStartPost=/usr/share/cockpit/motd/update-motd  loc>
    Process: 2284 ExecStartPost=/bin/ln -snf active.motd /run/cockpit/mo>
      Tasks: 0 (limit: 10896)
     Memory: 1.2M
        CPU: 53ms
     CGroup: /system.slice/cockpit.socket

Dec 17 13:46:13 RockyLinux9 systemd[1]: Starting Cockpit Web Service Soc>
Dec 17 13:46:13 RockyLinux9 systemd[1]: Listening on Cockpit Web Service>

[root@RockyLinux9 ~]#ss -ntl
State             Recv-Q            Send-Q                       Local Address:Port                       Peer Address:Port           Process
LISTEN            0                 128                                0.0.0.0:22                              0.0.0.0:*
LISTEN            0                 4096                                     *:9090                                  *:*
LISTEN            0                 128                                   [::]:22                                 [::]:*

https://192.168.111.5:9090/

CentOS Cockpit 开启 root 用户登录权限_cockpit root-CSDN博客

信号发送kill

信号可以实现进程间的通讯

[root@RockyLinux9 ~]#type kill
kill is a shell builtin

 查看可用信号类型

[root@RockyLinux9 ~]#kill -l
[root@RockyLinux9 ~]#trap -l

查看帮助:man 7 signal

kill pid ( 不加参数默认是15)

 正常改了配置文件不会立即生效,改了配置文件进程服务重新启动一下。重新读取配置文件,重新启动进程就是kill这个进程可能有其他用户在使用这个进程,把服务重启了把别人踢了老用户就掉线了,SIGHUP就不用重启进程直接让其生效

就是在启动的springboot配置文件,不选择进程重启,而是使用SIGHUP信号

不kill掉springboot启动程序让配置文件生效

ss -ntl 查看端口号 根据网络端口号
lsof -i :80 根据端口号查看程序PID
pstrees -p 查看父进程

kill -1 8337

 到底是否能kill掉

2进程管理信号和前后台执行_哔哩哔哩_bilibili 0:04:00

[root@RockyLinux9 ~]#echo $$
4333
[root@RockyLinux9 ~]#kill -15 4333
[root@RockyLinux9 ~]#echo $$
4333

无法kill 自己 的窗口

trap 无法捕获 9 信号

子进程被kill掉父进程会将其恢复

假如子进程因为异常而关闭,方法就算安排一个能救活他的父进程。避免这个进程对外提高服务出问题

可以kill 掉进程1吗

[root@RockyLinux9 ~]#kill 1
[root@RockyLinux9 ~]#kill -9 1

 不一定9 命令就一定比 15命令好。9命名称为强制kill,但是有的时候15命令的能kill掉,9命令却kill不掉。

 killall 来自于 psmisc包

不用知道进程PID直接输入命令就行!

[root@CentOS7 ~]# type killall
killall is /usr/bin/killall
[root@CentOS7 ~]# rpm -qf `which killall`
psmisc-22.20-17.el7.x86_64
[root@RockyLinux9 ~]#ping www.baidu.com
[root@RockyLinux9 ~]#killall ping  默认是kill -15

[root@RockyLinux9 ~]#man kill

如果信号为 0,则不会发送实际信号,但仍会执行错误检查。

错误检查就是检测当前进程是否有错误的。相当于是给进程进行体检。

[root@RockyLinux9 ~]#ping www.baidu.com
[root@RockyLinux9 ~]#killall -0 ping
[root@RockyLinux9 ~]#echo $?   (判断进程是否有问题)
0

作业管理

Linux的作业控制

  • 前台作业:通过终端启动,且启动后一直占用终端。
  • 后台作业:通过终端启动,但启动后即转入后台运行(释放终端)

让作业运行于后台

  • 运行中的作业:ctrl + z
  • 尚未启动的作业 COMMAND &

 ctrl + z 进入停止态

[root@RockyLinux9 ~]#ping www.baidu.com
PING www.a.shifen.com (183.240.98.198) 56(84) bytes of data.
64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=1 ttl=128 time=34.1 ms
64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=2 ttl=128 time=33.3 ms
64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=3 ttl=128 time=31.5 ms
^Z
[1]+  Stopped                 ping www.baidu.com

[root@RockyLinux9 ~]#killall -0 ping
[root@RockyLinux9 ~]#echo $?
0 停止态的进程是健康的

 查看停止态的进程

注意是在刚刚执行ctrl + z 里面敲 jobs 指令只能在当前窗口敲

[root@RockyLinux9 ~]#jobs
[1]+  Stopped                 ping www.baidu.com

将停止态的进程前台执行 

fg (frontground 前台)

[root@RockyLinux9 ~]#fg 1
ping www.baidu.com
64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=4 ttl=128 time=30.8 ms
64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=5 ttl=128 time=29.6 ms
64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=6 ttl=128 time=29.0 ms
^C
--- www.a.shifen.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 341921ms
rtt min/avg/max/mdev = 28.988/31.382/34.121/1.846 ms

 变为僵尸进程 父进程停止态kill掉子进程

[root@CentOS8 ~]# kill -19 1416

[root@CentOS8 ~]# kill -15 65624

 僵尸进程也是健康的

[root@RockyLinux9 ~]#kill -0 65624
[root@RockyLinux9 ~]#echo $?
0 僵尸态的进程是健康的

 为什么就剩个躯壳怎么还是健康的说明用kill -0 检查还是不合理

[root@CentOS8 ~]# ping www.baidu.com
PING www.a.shifen.com (183.240.98.198) 56(84) bytes of data.
64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=1 ttl=128 time=26.6 ms
^Z
[1]+  Stopped                 ping www.baidu.com

[root@CentOS8 ~]# jobs
[1]+  Stopped                 ping www.baidu.com

%1 来表示作业号
[root@CentOS8 ~]# kill -18 %1 (变成了后台运行)
[root@CentOS8 ~]# 64 bytes from 183.240.98.198 (183.240.98.198): icmp_seq=2 ttl=128 time=29.0 ms

此时敲ctrl c 没用因为是后台运行需要用fg 1 将其变为前台进程 打断了没关系接着输就行

 后台执行

[root@CentOS8 ~]# ping www.baidu.com &

后台执行会随着窗口关闭而关闭。

即使窗口关闭了,进程依旧可以持续进行执行。

[root@CentOS7 ~]# yum -y install screen
[root@CentOS8 ~]# screen
[root@CentOS7 ~]# ping 192.168.111.7

 关掉了窗口程序并没有停止

[root@CentOS7 ~]# killall ping
[root@CentOS7 ~]# killall screen

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。将关闭后台作业,如果希望送往后台后,剥夺与终端的关系

  • nohup COMMAD &>/dev/null &
  • screen: COMMAD
  • tmux:COMMAD
[root@CentOS7 ~]# nohup ping 192.168.111.7
nohup: ignoring input and appending output to ‘nohup.out’

输出到这个文件中nohup.out

 由于文件不断增加,所以我们输入到空设备中!

[root@CentOS7 ~]# nohup ping 192.168.111.7 &> /dev/null

发现了吗?ping进程又找了个父进程。为了保持窗口关了进程还能运行就得再找一个父进程。

并行运行

利用后台运行,达到并行效果,同时运行多个进程,提高效率。

方法1:

[root@CentOS7 ~]# vim all.sh
[root@CentOS7 ~]# cat all.sh
#!/bin/bash
ping www.baidu.com &
ping www.baidu.com &
ping www.baidu.com &

[root@CentOS7 ~]# killall ping

 方法2:

[root@CentOS7 ~]# (ping www.baidu.com&);(ping www.baidu.com&);(ping www.baidu.com&);
[root@CentOS7 ~]# killall ping

方法3:

[root@CentOS7 ~]# ping www.baidu.com& ping www.baidu.com& ping www.baidu.com&
[root@CentOS7 ~]# killall ping

 加深印象:多组命令并行

[root@CentOS7 ~]# { ping -c3 www.baidu.com;ping 192.168.111.5; }& { ping -c3 www.baidu.com ;ping 192.168.111.5; }&

{ ping -c3 www.baidu.com;ping 192.168.111.5; } 里面命令按顺序执行

参考文献

4进程相关管理工具_哔哩哔哩_bilibili

5进程查看和管理工具详解_哔哩哔哩_bilibili

6进程管理工具_哔哩哔哩_bilibili

7进程管理相关工具_哔哩哔哩_bilibili

1性能监控工具和信号管理_哔哩哔哩_bilibili

2进程管理信号和前后台执行_哔哩哔哩_bilibili

总结

所有命令都需要反复敲来实验来记忆,本人基本上是个人理解加参考其他大佬的肯定有很多问题欢迎指正,我会及时修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值