Linux进程管理.二Day.21

一.管理进程状态

当程序运行为进程后如果希望停止进程时可以使用kill命令对进程发送关闭信号。除了kill还有killall,pkill

1.使用kill -l 列出当前系统所用的信号

[root@localhost ~]# kill -l

常用:

1:SIGHUP (重新加载配置文件)

9:SIGKILL(强制杀死进程)

15:SIGTERM(终止进程,默认kill使用该信号)

使用方法:

[root@yum-test ~]# kill 7259

(kill  加进程PID 正常停止一个程序)

[root@localhost ~]# kill -1 8668

(kill -1  加进程PID 平滑重载配置文件【重载之后PID不变】)

[root@yum-test ~]# kill -9 7488

(kill -9 加进程PID  强制杀死一个进程)

[root@yum-test ~]# pkill zibbx

(pkill  加程序名  批量杀死有关zibbx的进程)

[root@yum-test ~]# killall nginx

(killall  加程序名  批量杀死有关nginx的进程)

二.如何管理后台进程

1.通常进程都会在终端运行,一旦关闭终端进程也就随着结束。那么将进程放入后台运行就会比较方便,不会影响到终端的正常运行。比如拷贝比较大的文件或者下载文件等等一些不可中断的进程。

2.将进程放入后台的工具

jobs,bg,fg等方式需要先查看状态比较麻烦,推荐使用screen。screen用法:

[root@yum-test ~]# screen -S wget_os

(screen -S  窗口名称    开启一个screen窗口,指定名称)

在开启的screen窗口执行任务即可

退出窗口:

ctrl+a+d

[detached from 26650.wget_os]

(平滑退出screen窗口,但是不会终止screen中的任务)

[root@yum-test ~]# exit

[screen is terminating]

(终止screen窗口)

[root@yum-test ~]# screen  -list

(查看screen窗口正在运行的任务)

[root@yum-test ~]# screen  -r wget_os(或PID)

(进入正在运行的任务窗口)

三.进程优先级是什么

1.优先级指的就是优先选择,优先享受资源,比如排队买票时的军人优先。

2.进程的nice值越高:表示优先级越低。例如:19,该进程容易将CPU使用量让给其他进程。

进程的nice值越低:表示优先级越高。例如:-20,该进程更不容易将CPU使用量让给其他进程。

NI=0 PR=20

NI=-20    PR=0

NI=10    PR=30

NI=19    PR=39

NI=5      PR=25

3.nice,renice用法。(-n 优先级数字【例如:-n  -20】-p 指定进程的PID)

nice用法(启动一个程序为该程序设定优先级):在ssh的NI为0时

终端0:

[root@localhost ~]# nice -n 5 vim zy

终端1:

[root@localhost ~]# ps axo pid,command,nice|grep vim |grep -v grep

  9698 vim zy                        5

nice用法:在ssh的NI为-20时

[root@localhost ~]# ps axo pid,command,nice|grep vim|grep -v grep

  9792 vim zy                      -15

renice用法(调整已经启动过的进程优先级):

[root@yum-test ~]# renice -n -20 -p 7261 (sshPID)

root@yum-test ~]# ps axo pid,command,nice|grep ssh

  7261 /usr/sbin/sshd -D          -20

四.平均负载(查看负载情况top或uptime)

1.平均负载可以简单理解为,平均负载其实就是单位时间内的活跃进程数。(处于运行中的进程)+(处于等待运行的进程)+(不可中断的进程)

1. 如果平均负载(1分钟,5分钟,15分钟)的三个基数基本相同或者相差不大,那么说明系统负载很平稳。

2.但如果1分钟的值远小于15分钟的值,那么就说明系统最近1分钟的负载在减少,而过去的15分钟内却有很大的负载。

相反,如果1分钟的值远大于15分钟的值,那就说明最近1分钟的负载在增加,这种增加有可能是临时性的,也有可能还会持续增加,需要持续观察。

例如:假设有两个CPU,系统上看到的平均负载为 2.73  6.90 12.98

说明在过去的1分钟内,系统有136%的超载(2.73/2=136%)

在过去的5分钟内,系统有345%的超载(6.90/2=345%)

在获取的15分钟内,系统有649%的超载(12.98/2=649%)

总体来说系统的负载是在逐渐的降低。

PS:一旦1一分钟的平均负载接近或超过了CPU的个数,就意味着系统正在发生过载的问题,这个时候就需要分析问题并优化。

(实际生产环境中当平均负载高于CPU数量70%的时候,就要分析并优化,但是70%也不是觉得,可以选择将系统的平均负载监控起来。)

3.平均负载与CPU使用率没有直接关系。

平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数,所以他不仅包括了正在使用CPU的进程,还包括了等待CPU的进程和等待I/O的进程。

而CPU使用率是单位时间内CPU繁忙情况的统计,跟平均负载并不一定完全对应。

CPU密集型进程,使用大量CPU会导致平均负载升高,此时这两者是一致的;

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

大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高;

例:

使用工具找出平均负载升高的根源。

1.stress:是Linux系统压力测试工具,这里我们用作异常进程虚拟平均负载升高的常见。

2.mpstat:是多核CPU性能分析工具,用来实时查看每个CPU的性能指标,以及所有CPU的平均指标。

3.pidstat:是一个常用的进程性能分析工具,是来实时查看进程的CPU,内存,I/O以及上下文切换等性能指标。

CPU密集型进程,使用大量CPU会导致平均负载升高,此时这两者是一致的;

终端0:

[root@localhost ~]# stress --cpu 1 --timeout 600

(模拟一个CPU使用率100%以上的场景)

终端1:

[root@localhost ~]# uptime

20:30:22 up 11:58,  2 users,  load average: 1.23, 0.47, 0.20

(负载会持续升高)

终端2:

[root@localhost ~]# mpstat -P ALL 5

08:35:46 PM  CPU    %usr  %nice    %sys %iowait    %irq  %soft  %steal  %guest  %gnice  %idle

08:35:51 PM  all99.80 0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00

08:35:51 PM    099.80 0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00

(使用mpstat监控所有CPU,每隔5秒输出一组数据)

从终端1可以看到,1分钟的平均负载会慢慢增加到1.23,而中端2还可以看到CPU的使用率为99.80%,但他的iowait只有0。这说明,平均负载的升高是由于CPU使用率为98.80%。可以使用pidstat来查询是哪个进程导致的。

[root@localhost ~]# pidstat -u 5 1

08:44:30 PM  UID      PID    %usr %system  %guest    %CPU  CPU  Command

08:44:35 PM    0      6550    0.20    0.00    0.00    0.20    0  vmtoolsd

08:44:35 PM    0    10450  100.00    0.20    0.00  100.00    0  stress

[root@localhost ~]# kill -9 10450

[root@localhost ~]# uptime

20:46:39 up 12:14,  3 users,  load average:0.56, 0.94, 0.74

(kill掉stress,负载明显降低)

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

终端0:

[root@localhost ~]# stress --io 4 --timeout 600

(模拟I/O压力)

终端1:

[root@localhost ~]# uptime

21:03:49 up 12:31,  4 users,  load average: 6.30, 3.06, 1.46

(查看平均负载变化)

终端2:

[root@localhost ~]# mpstat -P ALL 5

09:04:15 PM  CPU    %usr  %nice    %sys %iowait    %irq  %soft  %steal  %guest  %gnice  %idle

09:04:20 PM  all    1.60    0.00  98.40  0.00    0.00    0.00    0.00    0.00    0.00    0.00

09:04:20 PM    0    1.60    0.00  98.40  0.00    0.00    0.00    0.00    0.00    0.00    0.00

(查看CPU和sys的变化)

终端3:

[root@localhost ~]# pidstat -u 5 1

09:06:01 PM  UID      PID    %usr %system  %guest    %CPU  CPU  Command

09:06:06 PM    0      9610    0.00    3.61    0.00    3.61    0  kworker/u256:1

09:06:06 PM    0    10542    0.00    9.64    0.00    9.64    0  kworker/u256:0

09:06:06 PM    0    10558    0.40  14.26    0.00  14.66    0  stress

09:06:06 PM    0    10559    0.60  23.49    0.00  24.10    0  stress

09:06:06 PM    0    10560    0.40  22.69    0.00  23.09    0  stress

09:06:06 PM    0    10561    0.40  24.70    0.00  25.10    0  stress

09:06:06 PM    0    10569    0.00    0.20    0.00    0.20    0  pidstat

(查询问题所在)

[root@localhost ~]# pkill stress

[root@localhost ~]# uptime

21:11:07 up 12:39,  4 users,  load average: 2.28, 4.55, 2.99

(pkill掉stress,发现负载降低)

PS:当系统中运行程序超出CPU运行能力时,就会出现等待CPU的进程。

大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高;

终端0:

[root@localhost ~]# stress -c 4 --timeout 600

(模拟4个进程)

终端1:

[root@localhost ~]# uptime

21:21:16 up 12:49,  4 users,  load average: 4.11, 2.19, 2.14

(由于系统只有1个CPU,明显要比4个进程少的多,因此系统的CPU处于严重过载状态)

终端2:

(可以看出4个进程争抢一个CPU,每个进程的等待时间高达75%。这些超出CPU计算能力的进程,最终导致CPU过载。)

PS:在查看平均负载时也要注意,可能是CPU密集型进程导致的也有可能是I/O繁忙。当发现负载高的时候可以使用mpstat,pidstat等工具查看负载的原因。

你可能感兴趣的:(Linux进程管理.二Day.21)