后面也会持续更新,学到新东西会在其中补充。
建议按顺序食用,欢迎批评或者交流!
缺什么东西欢迎评论!我都会及时修改的!
在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频
进程树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; } 里面命令按顺序执行
参考文献
总结
所有命令都需要反复敲来实验来记忆,本人基本上是个人理解加参考其他大佬的肯定有很多问题欢迎指正,我会及时修改。