您的位置:首页 > 博客中心 > 网络系统 >

Linux之进程管理

时间:2022-04-03 16:28

一、进程管理

1、ps查看进程

[root@VM-4-16-centos ~]#ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  43596  3440 ?        Ss   Jan08   0:16 /usr/lib/systemd/systemd --switched-root --syst
root         2  0.0  0.0      0     0 ?        S    Jan08   0:00 [kthreadd]
#----------每个参数表示的意思--------------
USER      # 启动进程的用户
PID       # 进程运行的ID号
%CPU      # 进程占用CPU的百分彼
%MEM      # 进程占用内存百分比
VSZ       # 进程占用虚拟内存大小(单位KB)
RSS       # 进程占用物理内存实际大小(单位KB)
TTY        # 进程是由哪个终端运行启动的tty1、pts/0等 ?表示内核程序与终端无关(远程连接会通过tty打开一个bash:tty)
STAT      # 进程运行过程中的状态,主要有以下几种状态
‘‘‘
R  #进程运行
S  #可中断睡眠
s  #进程是控制进行,Ss进程的领导者,也就是父进程
<  #高优先级    S< #较高优先级
N  #低优先级    SN #较低优先级
T  #暂停状态
D  #不可中断睡眠
+  #进程正在运行
Z  #僵尸进程
I  #进程是多线程  SI 进程是以线程方式运行
‘‘‘
START  #进程启动时间
TIME   #进程占用CPU的总时间
COMMAND #程序的运行指令,[]属于内核态的进程,没有[]的是用户态进程

 2、top查看当前进程的状态

技术图片

技术图片

 top一些常用指令(top执行后,再执行指令,就可以)

‘‘‘
h   # 查看帮助
l   # 数字1,显示所有CPU核心的负载
z   # 以高亮显示数据
b   # 高亮显示处于R(进行中)状态的进程
M   # 按内存使用百分比排序输出
P   # 按CPU使用百分比排序输出
q   # 退出top    
‘‘‘

扩展:

# 第三方top
htop,top高级:yum install htop -y
iftop网卡流量:yum install iftop -y
glances,直观的显示:yum install glances -y
  -rz上传文件,可以动态看到,网卡情况

3、关闭进程

(1)kill -l 查看系统当前支持的信号

技术图片

 

 最常用的信号有以下3个信号

技术图片

# 杀死进程(本质发送终止进程的信号给对应的进程)
kill  pid   # 本质是 kill -15 pid(因为kill默认使用SIGTERM信号量)
# 发送信号
kill -信号量 PID
# pkill 杀死同名的进程   
[root@192 ~]# pkill vi
# killall 杀死同名的进程
[root@192 ~]# killall vi
# pkill 和 killall 相比于kill 省去了查询哪一步。

二、后台进程管理

1、&、jobs、bg、fg的使用(一般不推荐使用,了解即可)

# 挂起后台 &
[root@192 ~]# sleep 30000 &
[root@lqz ~]# jobs  #查看后台作业
[1]- Running sleep 3000 & 
[2]+ Stopped sleep 4000
‘‘‘
bg # 将进程挂到后台运行
fg # 将进程调回前台
‘‘‘
[root@lqz ~]# bg %2     #让作业 2 在后台运行
[root@lqz ~]# fg %1     #将作业 1 调回到前台
[root@lqz ~]# kill %1   3kill 1,终止 PID 为 1 的进程

2、 screend的使用(推荐使用)

# 1、安装
[root@192 ~]# yum install screen
# 2、开启一个screen窗口,指定名字
[root@192 ~]# screen -S wget_mysql # wget_mysql 窗口名字
# 3、在screen窗口中执行任务
[root@192 ~]# sleep 3000
# 4、退出,鼠标滑动/或者平滑退出,注意:使用exit才算关闭窗口

# 5、查看当前正在运行的screen
[root@192 ~]# screen -list
# 6、进入正在运行的screen
[root@192 ~]# screen -r screen名字
[root@192 ~]# screen -r 22058 #22058是screen的id号
# 7、退出/停止是exit或者ctrl+d

3、进程优先级

进程的优先级可以通过更改进程的nice的值来改变静态优先级,进程的nice值在-20 ~ 19之间,nice值越低,优先级越高。

 

技术图片

 (1)查看进程优先级

# top命令
‘‘‘
NI:nice值
PR:优先级
‘‘‘

技术图片

#也可以使用ps查看进程的优先级
[root@192 ~]# ps axo command,nice | grep sshd | grep -v grep # grep -v grep 是去除grep的进程行,避免造成干扰
/usr/sbin/sshd -D             0
sshd: root@pts/0              0
sshd: root@pts/2              0

(2)设置nice值

#命令:nice -n nice值 进程名字
[root@192 ~]# nice -n -10 vi &
[1] 1318
[root@192 ~]# ps axo pid,command,nice | grep 1318 #类似数据库查表,只显示表的一部分字段
  1318 vi                          -10
  1320 grep --color=auto 1318        0

[1]+  Stopped                 nice -n -10 vi

(3)修改正在运行进程的优先级

# 命令格式:renice -n 优先级数字 进程pid
[root@192 ~]# renice -n -20 1318
1318 (process ID) old priority -11, new priority -20
[root@192 ~]# ps axo pid,command,nice | grep 1318
  1318 vi                          -20
  1326 grep --color=auto 1318        0
[root@192 ~]# 

三、系统平均负载(进阶)

1、平均负载定义

平均负载:是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就平均活跃进程数。

2、平均负载和cpu的使用率之间的关系

 cpu的使用率:是指单位时间内cpu使用情况。

平均负载:是单位时间内进程活跃数

如:cpu密集型进程,使用大量cpu会导致平均负载升高

       IO密集型进程,等待I/O也会导致平均负载升高,但cpu使用率不一定很高

       当大量等待cpu的进程调度也会导致平均负载升高,那么cpu的使用率也会比较高。

总结:两者并没有直接联系。

 3、案例

(1) CPU密集型进程

#1、先模拟一个cpu使用率100%的场景
[root@192 ~]# stress --cpu 1 --timeout 600
stress: info: [1245] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
#2、在另一个终端查看平均负载的变化情况
[root@192 ~]# watch -d uptime  #watch -d表示高亮显示变化的区域
Every 2.0s: uptime
 17:27:44 up 2 days,  3:11,  3 users,  load average: 1.10, 0.30, 0.17
#3、在另一个终端查看cpu的使用率变化情况
# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
[root@192 ~]# mpstat -P ALL 5
Linux 3.10.0-1160.el7.x86_64 (192.168.92.2.centos)     01/15/2021     _x86_64_    (1 CPU)

08:41:58 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08:42:03 PM  all   96.21    0.00    3.59    0.00    0.00    0.20    0.00    0.00    0.00    0.00
08:42:03 PM    0   96.21    0.00    3.59    0.00    0.00    0.20    0.00    0.00    0.00    0.00

08:42:03 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08:42:08 PM  all   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:42:08 PM    0   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
#4、查看那个进程导致了CPU的使用率为100%
[root@192 ~]# pidstat -u 5 1
Linux 3.10.0-1160.el7.x86_64 (192.168.92.2.centos)     01/15/2021     _x86_64_    (1 CPU)
08:43:49 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
08:43:54 PM     0      1246   98.61    0.00    0.00   98.61     0  stress
08:43:54 PM     0      1247    0.00    0.20    0.00    0.20     0  sshd
08:43:54 PM     0      1270    0.00    0.20    0.00    0.20     0  watch

#总结:从上面几个结果可以看出,cpu的使用率100%,但是它的iowait是0,因此可以看出,平均负载慢慢增加是因为cpu使用率升高导致

(2)  I/O密集型进程

   #1、先模拟一个I/O压力的场景(不停执行sync)
[root@192 ~]# stress --io 1 --timeout 600
stress: info: [2428] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd
#2、在另一个终端查看平均负载的变化情况
[root@192 ~]# watch -d uptime  #watch -d表示高亮显示变化的区域
Every 2.0s: uptime
 21:04:44 up 45 min, 4 users,  load average: 1.28, 0.88, 0.58
#3、在另一个终端查看cpu的使用率变化情况
# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
[root@192 ~]# mpstat -P ALL 5
Linux 3.10.0-1160.el7.x86_64 (192.168.92.2.centos)     01/15/2021     _x86_64_    (1 CPU)
09:05:14  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:05:19  all    0.20    0.00   82.45   17.35    0.00    0.00    0.00    0.00    0.00    0.00
09:05:19    0    0.20    0.00   82.45   17.35    0.00    0.00    0.00    0.00    0.00   

#4、查看iowait高的原因
[root@192 ~]# pidstat -u 5 1
Linux 3.10.0-1160.el7.x86_64 (192.168.92.2.centos)     01/15/2021     _x86_64_    (1 CPU)
09:06:14 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
09:06:19 PM     0    127259   32.60    0.20    0.00   67.20   32.80     0  stress
09:06:19 PM     0    127261    4.60   28.20    0.00   67.20   32.80     0  stress
09:06:19 PM     0    127262    4.20   28.60    0.00   67.20   32.80     0  stress

#总结:结果可以看出是平均负载高是因为stress进程的sys跟iowait太高导致,cpu跟内核打交道的sys也很高

(3)大量进程

#1、先模拟一个4个进程的场景(不停执行sync)
[root@192 ~]# stress -c 1 --timeout 600
stress: info: [2428] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd
#2、在另一个终端查看平均负载的变化情况
[root@192 ~]# watch -d uptime  #watch -d表示高亮显示变化的区域
Every 2.0s: uptime
 21:28:44 up 1:10, 4 users,  load average: 4.28, 2.38, 1.28
#3、在另一个终端查看cpu的使用率变化情况
# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
[root@192 ~]# mpstat -P ALL 5
Linux 3.10.0-1160.el7.x86_64 (192.168.92.2.centos)     01/15/2021     _x86_64_    (1 CPU)
Average:    UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:      0    130290   24.55    0.00    0.00   75.25   24.55     -  stress
Average:      0    130291   24.95    0.00    0.00   75.25   24.95     -  stress
Average:      0    130292   24.95    0.00    0.00   75.25   24.95     -  stress
Average:      0    130293   24.75    0.00    0.00   74.65   24.75     -  stress  
#4、查看iowait高的原因
[root@192 ~]# pidstat -u 5 1
Linux 3.10.0-1160.el7.x86_64 (192.168.92.2.centos)     01/15/2021     _x86_64_    (1 CPU)
09:06:14 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
09:06:19 PM     0    127259   32.60    0.20    0.00   67.20   32.80     0  stress
09:06:19 PM     0    127261    4.60   28.20    0.00   67.20   32.80     0  stress
09:06:19 PM     0    127262    4.20   28.60    0.00   67.20   32.80     0  stress

#总结:从结果可以看出,4个进程在争1个进程,每个进程都在等待CPU时间,也就是wait接近70%,导致CPU过载,引起平均负载过高,

 

本类排行

今日推荐

热门手游