1、进程
名字 | 含义 |
---|---|
程序 | 安装包,程序代码,app,存在磁盘上面 |
进程 | 运行起来的程序,命令,服务(远程连接服务,网络服务)都可以成为进程。运行在内存中。 |
守护进程 | 守护进程,一直运行的进程,也可以叫做服务 |
2、僵尸进程
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
僵尸进程成因:由于某个原因导致某个进程挂掉了,但是进程本身任然存在,还占用着系统资源。
查找:未来通过ps aux
过滤 Z状态可找到僵尸进程或top命令查看
pstree -p
树状显示进程,-p
显示进程号
解决:
- 方案一:找出僵尸进程上级进程,结束进程即可
- 方案二:如果上级进程是主进程(pid为1进程),则需要重启Linux系统
3、孤儿进程
孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。
孤儿进程会被系统直接接管。(systemd进程)
4、进程监控指令
监控命令 | 含义 |
---|---|
ps | 静态:ps查看当前瞬间进程状态,一般用于临时检查或取值 |
top | 动态:top动态,交互,整体查看系统状态,负载,僵尸进程,cpu,内存。类似于windows任务管理器 |
1)ps命令格式
ps -ef
- UID 进程所属用户
- PID 进程id号,大部分是随机的
- PPID 父进程的id号,pstree -p查看详细信息
- CMD 进程命令
ps aux
- 比
-ef
多了一些,cpu使用率,内存使用率,占用内存大小,进程状态
第一列 | |
---|---|
第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个进程. |
进程状态
进程状态:进程运行中;僵尸进程;正在进行io的进程;前台或后台运行进程。
进程状态:基本状态+附加组成。(Ssl可中断的多线程的管理进程)
STAT进程状态 | 描述 |
---|---|
R(running) | 进程运行 |
D | 不可以中断进程(进程正在进程IO读写) |
Z(zombie) | 僵尸进程,异常的进程 |
S | 可中断进程(可以随时停止) |
T(terminate) | 进程被停止(挂起)Ctrl + z |
2)top命令格式
top命令默认是个交互式的命令,可以展示系统负载信息,进程信息,cpu,内存信息。类似于Windows任务管理器。
刚刚使用我们核心掌握几个就行,后面随着使用再增加。
swap叫交换分区,内存不足的时候临时充当为内存;swap本质是磁盘上面的一块空间,速度没有内存快 速度对比:cpu->内存->磁盘
3)案例
案例01 过滤出crond进程信息
ps -ef | grep "ssh"
ps -aux | grep "ssh"
过滤的结果可以通过
grep -v gre
p 排除下grep命令自己(进程)ps -ef | grep ssh | grep -v grep
后面还可以与wc配合使用统计进程数量。
ps -ef | grep ssh | grep -v grep | wc -l
根据过滤结果,随时调整过滤的命令条件。
ps -aux | grep "/usr/sbin/sshd"
案例02 按照树形结构查看进程信息
pstree
pstree -p #显示树形结构并输出pid.
ps auxf #也可以展示部分所属关系,没有pstree直观。
案例03 根据要求,只显示某些内容
#通过awk取列,必须单引号!!!awk '{peint $1}'
ps -ef | awk '{print $1}'
ps aux | awk '{print $2}'
ps aux | awk '{print $1,$3}' #第1列和第3列
#ps命令的选项,输出指定的内容
ps axo user,%cpu,stat
ps axo user,%cpu,stat,cmd
那么我想不显示标题怎么显示
#awk写法 排除第1行,从第2行开始
ps -ef | 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 取出某一个服务(crond)的进程信息(pid,%cpu,%mem,command)
ps aux |grep 'crond' |awk '{print $2,$3,$4,$11}'
完全使用ps命令过滤出来
ps --no-heading -o pid,%cpu,%mem,command -C crond
--no-heading 不显示标题
-C 过滤 注意不要加上ax.
-o输出指定列
Awk 做好一列
echo 1 a b test 998 |awk '{print $NF}' 998 倒数第2列 echo 1 a b test 998 |awk '{print $(NF-1)}' test
案例05 取出所有进程中内存使用率最高的前5
ps aux |sort -nrk4 | head -5
案例06 top基础使用与快捷键
#基础必会用法
q 退出
默认3秒刷新1次, 空格立刻刷新.
P 默认按照CPU使用率排序
M 按照内存使用率排序
#进阶用法:
top输入z进入颜色模式 按 x 标记出当前是按照哪列排序.
shift + > 向右
shift + < 向左
#top命令升级版,支持鼠标操作
htop
说明: htop是epel源中的命令. 没有需要配置epel源后安装即可(epel是企业linux扩展包)
案例07 非交互式
未来想获取top命令的结果,指标,需要让top运行在非交互模式
top -bn1 |awk 'NR==2'
-b 非交互模式
-n 只输出1次结果.
awk扩展
top -bn1 |awk 'NR==2{print $(NF-1),$NF}'
0 zombi
5、后台管理
这里我们主要掌握什么是前台,后台,如何让1个前台运行程序进入到后台(运行)
如何区分前台程序,后台程序:ps aux
进程状态查看,带+
表示前台运行的进程。
[root@yunwei ~]# ps aux | grep sleep | grep -v grep
root 9599 0.0 0.0 108056 356 pts/0 S+ 20:16 0:00 sleep 99
- 前台(前台运行): 需要连接后进行运行或操作,连接断开这个命令,操作就自动结束.
- 后台(后台运行): 让软件进入系统的后台,持续运行,一般情况下连接断开了也不会影响软件运行.
软件后台运行的办法 | 说明 | 应用场景 |
---|---|---|
命令 + & | 常用的后台运行办法 | 大部分时候使用这个即可 |
screen命令 | 通过软件创建空间,让命令在这个空间运行 | 稳定性强 |
先运行命令,然后按下ctrl +z(后台挂起),bg | 软件进入后台运行 | 顽固软件Ctrl + C 无法结束,可以通过这个方法结束它. |
nohup 命令 & | 会记录输出到文件中默认叫nohup.out | 如果想记录输出则可以用这个方法 |
1)&方法
#案例一 让sleep 999 进入后台运行
[root@yunwei ~]# sleep 999 &
[1] 30464
[root@yunwei ~]# ps aux | grep "sleep 999" | grep -v grep
root 30464 0.0 0.0 108056 356 pts/2 S 20:49 0:00 sleep 999
jobs
可以查看手动进入后台的程序[root@nanjing ~]# jobs [1]+ 运行中 sleep 999 &
2)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
3)ctrl + z
这个快捷键不是撤销,这个快捷键在Linux下面表示让当前运行的命令或服务进入 后台挂起 ,如果转为后台运行需要 在输入 bg
,如果是误触ctrl+z
,可以通过fg
让进程、命令回到前台。
4)nohup 命令 &方法
可以保留输出到指定文件中。默认是nohup.out文件中。其他方面与&符号一致。
#案例二 让ping baidu.com命令后台运行并记录输出 2
nohup ping -c20 baidu.com &
tail -f nohup.out
ping -c 表示次数ping多少次
6、杀手三剑客
命令 | 说明 |
---|---|
kill | kill + 进程pid进行结束进程,常用 |
pkill | pkill + 进程名字,取你狗命(你和狗),模糊查找 |
killall | killall + 进程名字,精确 |
kill信号
kill pid
默认发送结束信号,kill -9 pid
发送强制结束信号.别用kill -9 结束数据库
7、负载
1) 概述
负载 load average 平均负载:最近1分钟 5分钟 15分钟系统平均负载
负载:衡量系统繁忙程度指标.
衡量是否繁忙:数值越接近cpu核心总数,系统的负载越高
预警:建议负载达到cpu核心总数的 70-80% 。
2) 负载高?
那到底如何理解平均负载?
平均负载是指单位时间内,系统处于可运行状态(R,S)和不可中断状态(D)的平均进程数,也就是平均活跃进程数
负载是衡量正在运行的进程的平均数(可以中断进程和不可中断进程).
系统负载显示出什么信息?
负载主要衡量的是可运行状态(R,S 占用CPU)和不可中断 (io)
排查流程
1、通过监控软件发现系统负载高(w
,lscpu
查看)
2、判断是cpu还是io导致的负载高
- cpu高:top中的 us(user 用户占用cpu) sy(system 系统占用cpu)
- io高:top中的 wa(iowait)磁盘io导致的负载高
3、判断
- A. 如果是cpu导致的,排查出哪个进程导致的
ps aux
过滤出占用cpu较高的进程
- B. 如果是io导致的,排查初级哪个进程导致的,通过
iotop -o
命令排查。