系统管理体系之进程管理
1. 进程
名字 | 含义 |
---|---|
程序 | 安装包,程序代码,app,存放在磁盘上面. |
进程⭐️ | 运行起来的程序,命令,服务(远程连接服务,网络服务)都可以称作进程。 运行在内存中。 |
守护进程 | 守护进程, 一直运行的进程. 也可以叫做服务. |
2. 进程分类(异常进程)
2.1 僵尸进程⭐️⭐️⭐️⭐️⭐
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
僵尸进程:由于各种原因导致某个进程挂掉了,但是进程本身仍然存在,还占用着系统资源,这种异常进程僵尸进程。
- 查找:未来通过ps aux过滤 Z状态即可找出僵尸进程或top命令查看.
- 解决:
- 方案01:找出僵尸进程上级进程,结束进程即可
- 方案02:如果上级进程是主进程(pid为1进程),则需要重启Linux系统
温馨提示: pstree属于psmisc软件包,yum安装psmisc即可.
2.2 孤儿进程
孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。
孤儿进程会被系统直接接管.(systemd进程)
2.3 演示僵尸进程 ⭐⭐
- 通过gcc生成僵尸进程的命令文件
gcc编译c语言代码的工具
- top命令查看是否有僵尸进程
- 过滤出僵尸进程
[root@myvps ~]# ps aux |grep Z #找出僵尸进程的pid
pstree -p |grep pid的值
- 直接结束僵尸进程
kill pid值 如果不行就执行父进程
3. 进程监控指令 ⭐️⭐️⭐️⭐️⭐
Linux中必会的查询进程信息的命令
监控命令 | 含义 |
---|---|
ps | 静态:ps查看当前瞬间进程状态,一般用于临时检查或取值. |
top | 动态:top动态,交互,整体查看系统状态,负载,僵尸进程,cpu,内存. 类似于windows任务管理器. |
3.1 ps命令格式
1.1概述:
-
ps -ef
- UID 进程属于的用户
- PID 进程id号,大部分都是随机.
- PPID 父进程的id号, pstree -p查看详细关系
- CMD 进程名字
-
ps aux
- 比-ef多了一些,cpu使用率,内存使用率,占用内存大小,进程状态
ps aux 每一列含义
- ps aux每一列含义
每一列 | 进程属于用户 |
---|---|
第1列: User | 进程属于用户 |
第2列: PID | 进程号(子进程号) |
第3列: %CPU | cpu使用率. |
第4列: %MEM | 内存使用率 |
第5列: VSZ | 进程占用虚拟内存大小 (KB) |
第6列: RSS | 进程占用物理内存大小 (KB) |
第7列: TTY | 用户使用终端(用户连接进来后,系统创建) |
第8列: STAT | 进程状态 |
第9列: START | 进程启动时间. |
第10列: TIME | 进程占用CPU时间. |
第11列及最后:COMMAND | 进程名字(命令,选项 . ) []括起来的是内核进程, 其他是系统进程 systemd pid是1第 |
1.2 进程状态 ⭐⭐
- 进程状态:进程运行中,僵尸进程,正在进行io的进程,前台或后台运行进程。
- 进程状态:基本状态+附加组成。
STAT基本状态 | 描述 |
---|---|
R(running) | 进程运行 |
S | 可中断进程(可以随时停止) |
T(terminate) | 进程被暂停(挂起) ctrl +z |
D | 不可中断进程(进程正在进行IO读写) |
Z(zombie) | 僵尸进程,异常的进程 |
STAT状态+符号(附加状态)了解 | 描述 |
---|---|
s | 进程是控制进程, Ss进程的领导者,父进程*/主进程 |
< | 进程运行在高优先级上,S<优先级较高的进程 |
N | 进程运行在低优先级上,SN优先级较低的进程 |
+ | 当前进程运行在前台,R+该表示进程在前台运行 |
l(小写L) | 进程是多线程的,Sl表示进程是以线程方式运行(与程序)使用多线程可以让服务或软件支持更改的访问,但是需要软件支持。 |
- 常见的进程状态
R+ 前台运行中进程
R 后台运行进程
S 可中断进程(大部分进程)
T 后台挂起的进程 (说完挂起命令就懂了)
D 不可中断进程(io进程)
Ss 可中断进程(普通)管理进程
S< 可中断的高优先级进程
Ssl 可中断的多线程的管理进程
Z 僵尸进程
2. top命令格式
-
top命令默认是个交互式的命令,可以展示系统负载信息,进程信息,cpu,内存信息。类似于Windows任务管理 器
-
刚刚使用我们核心掌握几个就行,后面随着使用再增加。
swap叫交换分区,内存不足的时候临时充当为内存;swap本质是磁盘上面的一块空间,速度没有内存快
速度对比: cpu ------> 内存------> 磁盘
2.1 案例
01.过滤出crond进程信息 🌟🌟🌟🌟
ps -ef |grep crond
ps aux |grep crond
过滤的结果可以通过grep -v grep 排除下 grep 命令自己(进程)
ps -ef | grep crond | grep -v grep
后面还可以与wc配合使用统计进程数量。
ps -ef | grep crond | grep -v grep |wc -l
根据过滤结果,随时调整过滤的命令条件。
ps -ef | grep '/usr/sbin/sshd'
02. 按照树形结构查看进程信息 🌟🌟🌟🌟
- 一般用于查看进程间关系
pstree
pstree -p #显示树形结构并输出pid.ps auxf #也可以展示部分所属关系,没有pstree直观。
03. 根据要求,只显示某些内容.🌟🌟🌟🌟
- 根据要求取出ps命令结果中部分内容
#通过awk取列
ps aux | awk '{print $1}'
ps aux | awk '{print $2}'
ps aux | awk '{print $3}'
ps aux | awk '{print $1,$3}' #第1列和第3列#ps命令的选项,输出指定的内容
ps axo user,%cpu,statps axo user,%cpu,stat,cmd
- 不显示标题(了解)
#awk写法 排除第1行,从第2行开始
ps aux |awk 'NR>1{print $1,$3}'
awk '{print 列}'
awk '条件{print 列}'
awk 'NR > = 1{print 列}'
NR>1 行号大于1
NR>=2 行号大于等于2#ps不输出每一列的标题.
ps no-heading axo user,%cpu,stat
04. 4 取出某一个服务(crond)的进程信息(pid,%cpu,%mem,command)
ps aux |grep 'crond' |awk '{print $2}'ps aux |grep 'crond' |awk '{print $2,$3,$4,$11}'完全使用ps命令过滤出来
ps no-heading -o pid,%cpu,%mem,command -C crondno-heading 不显示标题
-C 过滤 注意不要加上ax.
-o输出指定列
awk 最后的列
最后一列 [root@oldboy-king tools]# echo 1 a b lidao 996 |awk '{print $NF}' 996[root@oldboy-king tools]# echo 1 a b lidao 996 |awk '{print $NF-1}' 995倒数第2列 [root@oldboy-king tools]# echo 1 a b lidao 996 |awk '{print $(NF-1)}' lidao
05. 取出所有进程中内存使用率最高的前5
#使用sort+ps
ps aux |sort -rnk4ps no-heading aux |sort -rnk4 |head -5#只用ps命令方法
ps aux sort=%mem |head -5
默认是升序排序,指标前面加上-减号表示降序排序。
06. top基础使用与快捷键 🌟🌟🌟🌟
#基础必会用法
q 退出
默认3秒刷新1次, 空格立刻刷新.
P 默认按照CPU使用率排序
M 按照内存使用率排序#进阶用法:top输入z进入颜色模式 按 x 标记出当前是按照哪列排序.shift + > 向右shift + < 向左#top命令升级版,支持鼠标操作
htop
说明: htop是epel源中的命令. 没有需要配置epel源然后安装即可.
07. 非交互模式
- 未来想获取top命令的结果,指标,需要让top运行在非交互模式
top |awk 'NR 2'top -bn1 |awk 'NR 2'
-b 非交互模式
-n 只输出1次结果.
awk扩展
[root@myvps ~]# top -bn1|awk 'NR==2' |awk '{print $(NF-1),$NF'} 0 zombie
4. 后台管理
这里我们主要掌握什么是前台,后台,如何让1个前台运行程序进入到后台(运行)。
如何区分前台程序,后台程序:进程状态查看,带+表示前台运行的进程。
-
前台(前台运行): 需要连接后进行运行或操作,连接断开这个命令,操作就自动结束.
-
后台(后台运行): 让软件进入系统的后台,持续运行,一般情况下连接断开了也不会影响软件运行.
软件后台运行方法 | 说明 | 应用场景 |
---|---|---|
1️⃣命令 & | 常用的后台运行方法 | 大部分时候使用这个即可 |
2️⃣nohup 命令 & | 与第1个类似,会记录输出到文件中默 认叫nohup.out | 如果想记录输出则可以用这个方法 |
3️⃣先运行命令,然后按下ctrl + z(后台挂起),bg | 软件进入后台运行 | 顽固软件ctrl +c 无法结束,可以通 过这个方法结束它 |
4️⃣ screen命令 | 通过软件创建空间,让命令在这个空 间运行 | 稳定性比 |
4.1 &方法 ⭐⭐⭐⭐⭐
# 案例_01 让sleep 999命令后台运行
sleep 9999 &
[1] 2114[root@myvps ~]# ps aux |grep sleep
root 2114 0.0 0.0 108052 356 pts/0 S 19:03 0:00 sleep 99999
root 2124 0.0 0.0 112824 976 pts/0 R+ 19:04 0:00 grep --color=auto
说明
[1] 2114
1表示 手动进入到后台运行的第1个进程。
2114表示进程pid
jobs可以查看手动进入后台的进程
4.2 nohup 命令 &方法
可以保留输出到指定文件中。默认是nohup.out文件中。其他方面与&符号一致
# 案例_02 让ping baidu.com命令后台运行并记录输出nohup ping -c20 baidu.com &
tail -f nohup.outping -c 表示次数ping多少次
温馨提示 :如果想输出到其他文件
nohup 命令 > 新的文件 &即可
nohup ping baidu.com >lidao-new.txt &
4.3 ctrl+z
这个快捷键不是撤销,这个快捷键在Linux下面表示让当前运行的命令或服务进入 后台挂起 ,如果转为后台运行需要 在输入bg,如果是误触ctrl+z,可以通过fg让进程、命令回到前台。
一般较少使用。
4.4 screen
一般我们使用&,nohup方法让命令,服务进入后台运行,但是可能不稳定
这时候可以通过screen命令较为稳定的后台运行一些指令。
简易原理:创建screen空间,screen命令维持,在里面运行的命令只要空间在,里面的命令就不会断(后台运行)。
#1. 安装screen
yum install -y screen#2. 运行screen
screen
进入screen虚拟窗口#3. 执行命令
输入命令 ping baidu.com#4. 退出screen窗口
退出窗口(异常推荐,正常退出)
ctrl + a 然后 d#5. 查看screen窗口
查看
screen -ls#6.恢复
恢复
screen -r彻底结束
ctrl + d
5. 杀首三剑客
3个用于结束进程的命令
命令 | 说明 |
---|---|
kill | kill + 进程pid进行结束进程,常用. |
pkill | pkill + 进程名字, 取你狗命(你和狗),模糊查找. |
killall | killall + 进程名字,精确 |
- kill 信号
- kill pid 默认发送结束信号
- kill -9 pid 发送强制结束信号。别用kill -9 结束数据库
6. 负载
6.1概述
- 负载 load average 平均负载: 最近1分钟 5分钟 15分钟系统平均负载
- 负载:衡量系统繁忙程度指标.
- 衡量是否繁忙: 数值越接近cpu核心总数,系统的负载越高 .
- 预警: 建议负载达到cpu核心总数的70-80%。
负载原理:
那到底如何理解平均负载:平均负载是指单位时间内,系统处于可运行状态(R,S)和不可中断状态(D)的平均进程 数,也就是平均活跃进程数
负载是衡量正在运行的进程的平均数(可以中断进程和不可中断进程).
系统负载显示出什么信息:
负载主要衡量的是可运行状态(R,S 占用CPU)和不可中断 (io)
6.2 负载高?⭐⭐⭐⭐⭐
-
排查流程
-
1️⃣通过监控软件发现系统负载高(w,lscpu查看)
-
2️⃣判断是cpu还是io导致的负载高.
- cpu高:top中的 us(user 用户占用cpu) sy(system 系统占用cpu)
- io高: top中的 wa(iowait) 磁盘io导致的负载高
-
3️⃣
- 🅰如果是cpu导致的,排查出哪个进程导致的ps aux过滤出占用cpu较高的进程
- 🅱如果是io导致的,排查初级哪个进程导致的,通过iotop -o命令排查。
-
4️⃣未完待续.(具体分析这个进程有啥问题,第2阶段再说)
-