一.管理进程状态
当程序运行为进程后如果希望停止进程时可以使用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:
PS:在查看平均负载时也要注意,可能是CPU密集型进程导致的也有可能是I/O繁忙。当发现负载高的时候可以使用mpstat,pidstat等工具查看负载的原因。