进程管理

进程管理命令-ps

## ps aux
a:查看所有的终端进程
x:查看所有的非终端进程
u:显示进程的用户
f:查看子进程
[root@qls ~]# ps auxf|grep nginx
o:自定义查看想要看的字段
[root@qls ~]# ps axo user,pid,%cpu,%mem,command
--sort:排序,可以根据ps的所有字段
[root@zls ~]# ps aux --sort %cpu
[root@web01 /]# ps -aux --sort -pmem                              # 对内存占用升序排序
[root@web01 /]# ps -aux --sort -pcpu                              # cpu占用升序排序
[root@web01 /]# ps -aux --sort -pcpu,-pmem|head -n 10             # 对cpu和内存合并到一个命令,并只查看前十行信息
      
 ## 显示进程的子进程                 
[root@zls ~]# ps auxf|grep [n]ginx
root       2033  0.0  0.1 125096  2112 ?        Ss   13:29   0:00 nginx: master process /usr/sbin/nginx
nginx      2034  0.0  0.1 125484  3148 ?        S    13:29   0:00  \_ nginx: worker process

#查看进程树 
[root@zls ~]# pstree

# 以树状图显示进程间的关系
pstree -a              

USER:       //启动程序的用户
PID:        //进程ID
%CPU:       //占用CPU的百分比
%MEM:       //占用内存的百分比
VSZ:        //虚拟内存集(进程占用虚拟内存的空间)
RSS:        //物理内存集(进程占用物理内存的空间)

TTY:        //运行的终端
        ?:      #内核运行的终端
        tty1:   #机器运行的终端
        pts/0:  #远程连接的终端

STAT:       //进程状态
        D:      #无法中断的休眠状态(通IO的进程)
        R:      #正在运行的状态
        S:      #处于休眠的状态
        T:      #暂停或被追踪的状态
        W:      #进入内存交换(从内核2.6开始无效)
        X:      #死掉的进程(少见)
        Z:      #僵尸进程
        <:      #优先级高的进程
        N:      #优先级较低的进程
        L:      #有些页被锁进内存
        s:      #父进程(在它之下有子进程开启着)
        l:      #以线程的方式运行
        |:      #多进程的
        +:      #该进程运行在前台
START:      //进程被触发开启的时间
TIME:       //该进程实际使用CPU的运行时间
COMMAND:    //命令的名称和参数
        []:     #内核态的进程
        没[]:    #用户态的进程

## 查看pid的额外命令
[root@qls ~]# pgrep nginx
[root@qls ~]# pidof nginx

## 此命令等同于ps -ef|grep nginx|grep -v grep 
## 原因,grep使用[]相当于扩展正则,会匹配n的内容也就是变成内容为nginx,而实际上的查询如下图
## 当使用此命令时,后台会自动产生一个进程为ps -ef|grep [n]nginx,这样看后台的命令就和nginx不一致
## 所以这里就是使用ps -ef|grep [n]ginx 可以替代命令ps -ef|grep nginx|grep -v nginx
[root@oldboy app]# ps -ef|grep [n]ginx
root       7573      1  0 18:13 ?        00:00:00 nginx: master process /app/nginx/sbin/nginx
nginx      7574   7573  0 18:13 ?        00:00:00 nginx: worker process

## pgrep查看pid额外命令
[root@oldboy yum.repos.d]# pgrep nginx -l -a                             # 批量查看nginx的进程,包括子进程和父进程
21194 nginx: master process /app/nginx/sbin/nginx
21195 nginx: worker process

## pidof 查看服务的所有进程(但不会显示哪个是子进程哪个是父进程)
[root@oldboy yum.repos.d]# pidof nginx                                   # 查询nginx的相关进程,包括子进程和父进程(显示不够详细,一般结合xargs使用)
21195 21194
[root@oldboy yum.repos.d]# pidof nginx|xargs kill -9                     # 批量删除

进程管理命令-top

top

top - 09:10:31 up 1 day, 28 min,  1 user,  load average: 0.00, 0.01, 0.05
# 09:10:31  :当前系统时间
# up 1 day, 28 min  :运行时间
# 1 user  :同时在线用户数量
# load average: 0.00, 0.01, 0.05
0.00 : 1分钟的负载
0.01 : 5分钟的负载
0.05 : 15分钟的负载


Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
# 105 total : 总共有多少个工作任务
# 1 running : 1个在运行
# 104 sleeping : 104个在等待
# 0 stopped:没有停止的
# 0 zombie:没有僵尸进程

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 0.0 us : 用户态(user用户使用cpu的百分比)
# 0.0 sy : 内核态(system系统进程占用cpu的百分比)
# 0.0 ni : 优先级
# 100.0 id : CPU空闲程度
# 0.0 wa :(wait等待状态的进程)
# 0.0 hi : 硬中断
# 0.0 si : 软中断
# 0.0 st :虚拟机(如果当前系统安装了虚拟机)KVM,vitural box

-d:指定变化时间
-p:只查看指定PID的进程
-u:只查看指定用户的进程
-b:保存到文件
-n:指定次数


# top 常见指令
h   查看帮出
z   高亮显示
1   显示所有CPU的负载
s   设置刷新时间
b   高亮现实处于R状态的进程
M   按内存使用百分比排序输出
P   按CPU使用百分比排序输出
R   对排序进行反转
f   自定义显示字段
k   kill掉指定PID进程
W   保存top环境设置 ~/.toprc
q   退出


# PID:进程id号 
# USER:用户
# PR:优先级
# NI:nice值,正常为0,负值表示高优先级,正值表示低优先级
# VIRT:虚拟内存
# RES:真实内存
# SHR:共享内存
# S:进程状态
# %CPU:占用cpu的百分比
# %MEM:占用内存的百分比
# TIME+:进程运行时间
# COMMAND:进程运行的命令

什么是中断

- 中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响 - 设备的请求。

##什么是软中断呢?
	软中断和硬中断都有一个共同的特点,都会中断当前操作,但是呢又有所区别,软中断当在进行一个任务的时候来了一个新的任务,就将先停止当前的任务,然后立马将新的任务放入内存当中,延迟处理新任务,最后此 任务交由线程来进行处理。
       为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断    (softirq)来完成。 
	
## 什么是硬中断呢
	同样在执行一个进程的时候,又有新的任务请求访问,cpu会立马对当前进程进行处理,但是呢新的进程只能处于等待,等待上进程结束之后,才能对新进程进行处理
        由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统,系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。

kill 信号管理

- kill不仅仅可用作进程的结束,也可以对服务重新加载,将进程暂停等等。。。

[root@qls ~]# kill -l					# 列出所有支持的信号
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

//常见信号列表:
数字信号        信号别名        作用
1       HUP     挂起信号,往往可以让进程重新配置	                           # 如nginx配置文件有修改,但不想重启服务,可重新加载
kill -s HUP									  # 配置文件,使用这两种方法,不会影响到业务
kill -1

2       INT     中断信号,起到结束进程的作用,和ctrl + c 的作用一样
kill -s INT
kill -2

3       QUIT        让进程退出,结果是进程退出
kill -s QUIT
kill -3

9       KILL        直接结束进程,不能被进程捕获
kill -9
kill -s KILL

15      TERM        进程终止,这是默认信号
kill -15
kill -s TERM
kill

18      CONT        被暂停的进程将继续恢复运行
19      STOP        暂停进程
20      TSTP        用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停

## pkill								    # 批量对nginx进程进行杀死
[root@oldboy yum.repos.d]# netstat -lntup|grep 80
tcp        0      0 0.0.0.0:80            0.0.0.0:*               LISTEN      20991/nginx: master 
[root@oldboy yum.repos.d]# pkill nginx
[root@oldboy yum.repos.d]# netstat -lntup|grep 80

## killall
[root@oldboy yum.repos.d]# killall nginx				   # 批量对nginx进程进行杀死和pkill一样
[root@oldboy yum.repos.d]# netstat -lntup|grep 80

进程优先级

# nice 使用nice指定进程优先级
	nice值越高,优先级越低,默认文件描述符为1024个,如超过1024将会导致无法远程连接服务器,所以不仅需要对ulimit数量进行优化,还需要将nice优先级进行修改,数值越低优先级越高。
	
[root@zls ~]# nice -n -5 vim zls                        #打开一个终端

[root@zls ~]# ps aux|grep [v]im                         #打开另一个终端,查看进程的优先级
root       2342  0.1  0.2 151720  5212 pts/1    S<+  19:49   0:00 vim zls
[root@zls ~]# ps axo command,nice|grep [v]im
vim zls                      -5

# renice 调整已运行程序的优先级		
[root@qls ~]# ps axo nice,command|grep sshd
[root@qls ~]# renice 19 9962							  # 指定优先级为19 pid为9962

后台进程管理

## 为啥要后台进程
通常进程都会在终端前台运行,但是一旦关闭终端,进程也会随着结束,那么此时我们就希望进程能在后台运行,就是将在前台运行的进程放到后台运行,这样即使我们关闭了终端也不影响进程的正常运行。

## 为啥把进程放到后台运行
企业中很多时候会有一些需求:
1.传输大文件,由于网络问题需要传输很久
2.我们之前的国外业务,国内到国外,网速很慢,我们需要选择节点做跳板机,那么就必须知道,哪个节点到其他地区网速最快,丢包率最低。
3.有些服务没有启动脚本,那么我们就需要手动运行,并把他们放到后台

## 使用什么工具可以把进程放入后台
早期的时候,大家都选择使用&,将进程放到后台运行,然后再使用jobs、bg、fg等方式查看进程状态,太麻烦了,也不只管,所以我们推荐使用screen和nohup

&:将进程放在后台执行
Ctrl + z:暂停
bg:(background)后台
fg:调出


# screen
· 作用:后台开启新终端执行命令,不影响前台操作,如需查看后台进程,可直接进入新终端中
[root@qls ~]# yum install -y screen					          # 首先需要安装此命令
[root@oldboy yum.repos.d]# screen -S 这是新的后台任务			          # 开启新终端任务,并设置名称
ctrl+a+d								          # 退出新终端,回到原终端 
[root@oldboy yum.repos.d]# screen -ls						  # 查看后台终端进程数量,和对应id号
There are screens on:
	21082.这是新的后台任务	(Detached)
	20905.pingbaidu	(Detached)
2 Sockets in /var/run/screen/S-root.
[root@qls ~]# screen -r 21082						          # 进入新终端中
[root@qls ~]# screen 								  # 不加-S会随机指定一个名称
[root@oldboy yum.repos.d]# kill -9 21082					  # 杀死终端任务
[root@oldboy yum.repos.d]# screen -ls						  # 任务变成dead死亡状态
There are screens on:										
	21099.pts-0.oldboy	(Detached)
	21082.这是新的后台任务	(Dead ???)
	20905.pingbaidu	(Detached)
Remove dead screens with 'screen -wipe'.
3 Sockets in /var/run/screen/S-root.
[root@oldboy yum.repos.d]# screen -wipe						  # 执行命令将原本死掉后台进程移除


# nohup
[root@qls ~]# nohup sh a.sh &					# 将脚本放入后台执行,但脚本输出结果会放入nohup.out中

linux系统假死

## 什么是假死
· 就是能ping通服务器,但是ssh上不去,任何其他操作也没有反应,包括上面部署的nginx页面也无法打开

## 假死很难出现
作为一个多任务操作系统,要把系统忙死,忙到ssh都连不上去,也不是那么容易的。尤其是现在还有fd保护、进程数保护、最大内存保护之类的机制。
你可以fork很多进程,系统会变得很慢,但是ssh还是能连上去;你可以分配很多内存,但是内存多到一定程度oom killer就会把你的进程杀掉,于是ssh又能工作了

## 假死导致原因
有一个确定可以把系统搞成假死的办法是:主进程分配固定内存,然后不停的fork,并且在子进程里面sleep(100)。
也就是说,当主进程不停fork的时候,很快会把系统的物理内存用完,当物理内存不足时候,系统会开始使用swap;那么当swap不足时会触发oom killer进程;
当oom killer杀掉了子进程,主进程会立刻fork新的子进程,并再次导致内存用完,再次触发oom killer进程,于是进入死循环。而且oom killer是系统底层优先级很高的内核线程,也在参与死循环。

## 系统假死为何能ping通但无法访问
此时机器可以ping通,但是无法ssh上去。这是由于ping是在系统底层处理的,没有参与进程调度;sshd要参与进程调度,但是优先级没oom killer高,总得不到调度。

## 出现假死怎么办
为什么要费那么大的力气把机器搞死?我们知道假死是怎么产生的即可,这样可以针对假死的原因进行预防。 (其实假死的情况很少发生,只有当代码写的bug很多的情况下会出现。)
其实建议使用nice将sshd的进程优先级调高。这样当系统内存吃紧,还能勉强登陆sshd,进入调试。然后分析故障。

僵尸进程与孤儿进程

# 什么是僵尸进程
· 通俗一点说,僵尸进程就是当父进程依然存在,但子进程已经完成了他自己该完成的任务,但为了使父进程任然能对其管理并且查询调度,所以就会出现僵尸进程的情况,但一般的程序
会有回收机制,等待多长时间或者达到程序所编写的规则,就会对子进程也就是僵尸进程进行回收,但有的程序由于开发人员未对程序书写规则,就会导致子进程无法回收,僵尸进程一直存在
解决僵尸进程有两种方式:
一、针对程序有编写规则,但回收时间过长,僵尸进程过多,可以使用kill SIGCHLD '主进程id',那么主进程就会立马启动回收机制
二、针对程序没有编写规则,但父进程一直在fock子进程,可以直接kill掉主进程,那么子进程将由操作系统所管理,等待操作系统对僵尸进程进行回收

# 什么是孤儿进程
· 当主进程直接死掉而子进程依然存在,子进程的父进程没有了,那么子进程就是孤儿进程,当然所有进程的爸爸都是system或者init,所以当程序的子进程的父进程不在,理所当然
子进程将有操作系统所管理

平均负载

`平均负载是指,单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,一般平均负载不只针对cup,像磁盘,进程等问题都会导致负载升高,负载过高达到cpu数量的70%的时候就需要注意,一般出现负载过高,常用工具有mpstat和pidstat命令或者使用watch -d uptime实时高亮查看平均负载情况~~~~

## 平均负载和cpu使用率区别
· 平均负载:平均负载包括处于运行状态和不可中断状态的进程数,所以,他不仅包括了正在使用的CPU的进程数,还包括等待CPU和等待IO的进程数
· CPU使用率:CPU使用率是单位时间内,CPU繁忙情况的统计。

## 平均负载和CPU使用率共同点
· 大量使用CPU会导致负载升高
· 大量等待CPU的进程调度也会导致平均负载升高,同时CPU的使用率也会比较高

## CPU的种类
· CPU密集型
· IO密集型(MySQL服务器选择,因需要读写较多)

## 什么叫做可运行状态呢
· 可运行状态进程,是指正在使用CPU或者正在等待CPU的进程,也就是我们用PS命令看的处于R状态的进程

## 什么叫做不可中断状态呢
· 系统中最常见的是等待硬件设备的IO相应,也就是我们PS命令中看到的D状态(也成为Disk Sleep)的进程

平均负载多少合理?

假设现在在4,2,1核的CPU上,如果平均负载为2时,意味着什么呢?

核心数 平均负载 含义
4 2 有一半(50%)的CPU是空闲状态
2 2 CPU刚好完全被占用
1 2 至少一半的进程是抢不到CPU

平均负载的三个数值我们该关注哪一个

`总的来说,我觉得三个都需要关注~~~~

1.如果1分钟,5分钟,15分钟的负载数值相差不大,代表系统的负载很''稳定''

2.如果1分钟的值,远小于15分钟的值,那么证明系统的平均负载逐渐降低,但是15分钟区间,系统负载上升的原因需要知道

3.如果15分钟的值,远小于1分钟的值,那么证明系统的平均负载逐渐升高,有可能是临时的也有可能持续上升,需要观察

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

平均负载工具

## 工具介绍

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

mpstat: 是多核CPU性能分析工具,用来实时检查每个CPU的性能指标,以及所有CPU的平均指标。(负载过高首选),是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标

pidstat:是一个常用的进程性能分析工具,用来实时查看进程的CPU,内存,IO,以及上下文切换等性能指标。(负载过高其次使用) 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

watch -d uptime:实时查看负载情况(和top命令差不多,但是这个比较直观)

cpu/io/进程压测模拟

### 场景一
# 前提准备
[root@tcy ~]# yum install -y stress

# 准备压测(针对cpu压测)
[root@tcy ~]# stress --cpu 1 --timeout 600						# 针对一颗cpu进行压测,时长为600秒

# 查看
[root@tcy ~]# watch -d uptime								   # 变化部分高亮显示
											  
[root@tcy ~]# mpstat -P ALL 5								   # 5秒钟检测一次所有指标

[root@tcy ~]# pidstat -u 5 1								   # 5秒输出一组数据,直观显示问题所在

### 场景二
# 准备压测(针对io压测,这种不会让系统卡顿,硬盘对系统没影响)
[root@tcy ~]# stress --io 1 --timeout 600						# 针对一块硬盘进行压测,时长为600秒

# 查看
[root@tcy ~]# mpstat -P ALL 5							 # 查看cpu使用情况变化(内核态占用过多)

22时19分32秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
22时19分37秒  all    2.78    0.00   97.22    0.00    0.00    0.00    0.00    0.00    0.00    0.00
22时19分37秒    0    2.78    0.00   97.22    0.00    0.00    0.00    0.00    0.00    0.00    0.00

22时19分37秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
22时19分42秒  all    3.01    0.00   96.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00
22时19分42秒    0    3.01    0.00   96.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00

[root@tcy ~]# pidstat -u 5 1			 # 查看哪个进程导致问题所在(未完整发现问题,需要安装额外包)

22时20分59秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
22时21分04秒     0      6900    0.00    0.20    0.00    0.20     0  kworker/0:0
22时21分04秒     0     10104    2.76   83.07    0.00   85.83     0  stress
22时21分04秒     0     10105    0.00   10.63    0.00   10.63     0  kworker/u256:2


平均时间:   UID       PID    %usr %system  %guest    %CPU   CPU  Command
平均时间:     0      6900    0.00    0.20    0.00    0.20     -  kworker/0:0
平均时间:     0     10104    2.76   83.07    0.00   85.83     -  stress
平均时间:     0     10105    0.00   10.63    0.00   10.63     -  kworker/u256:2

#下载新版本的包
[root@tcy ~]# wget http://pagesperso-orange.fr/sebastien.godard/sysstat-11.7.3-1.x86_64.rpm

#升级到新版本
[root@tcy ~]# rpm -Uvh sysstat-11.7.3-1.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
   1:sysstat-11.7.3-1                 ################################# [ 50%]
正在清理/删除...
   2:sysstat-10.1.5-17.el7            ################################# [100%]

[root@tcy ~]# pidstat -u 5 1						# 再次查看结果(多了一个%wait)查出问题根本

22时24分40秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
22时24分45秒     0       281    0.00    0.20    0.00    0.40    0.20     0  xfsaild/sda3
22时24分45秒     0     10104    2.99   82.67    0.00    0.00   85.66     0  stress
22时24分45秒     0     10105    0.00    8.76    0.00   92.43    8.76     0  kworker/u256:2
22时24分45秒     0     10118    0.20    0.40    0.00    0.00    0.60     0  watch
22时24分45秒     0     10439    0.00    3.98    0.00   94.82    3.98     0  kworker/u256:3
22时24分45秒     0     11007    0.00    0.20    0.00    0.00    0.20     0  pidstat

平均时间:   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
平均时间:     0       281    0.00    0.20    0.00    0.40    0.20     -  xfsaild/sda3
平均时间:     0     10104    2.99   82.67    0.00    0.00   85.66     -  stress
平均时间:     0     10105    0.00    8.76    0.00   92.43    8.76     -  kworker/u256:2
平均时间:     0     10118    0.20    0.40    0.00    0.00    0.60     -  watch
平均时间:     0     10439    0.00    3.98    0.00   94.82    3.98     -  kworker/u256:3
平均时间:     0     11007    0.00    0.20    0.00    0.00    0.20     -  pidstat

### 场景三
# 模拟多个进程同时使用
[root@tcy ~]# stress -c 4 --timeout 600	   # 因为一个cpu只能处理一个进程,这里同时发起四个进程,模拟过载

# 查看
[root@tcy ~]# pidstat -u 5 1					# 查看出来同时有四个进程在占用cpu资源
Linux 3.10.0-862.el7.x86_64 (zls)   2019年07月14日     _x86_64_    (1 CPU)

22时31分12秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
22时31分17秒     0     11317   24.75    0.00    0.00   75.05   24.75     0  stress
22时31分17秒     0     11318   24.95    0.00    0.00   75.45   24.95     0  stress
22时31分17秒     0     11319   24.75    0.00    0.00   75.25   24.75     0  stress
22时31分17秒     0     11320   24.75    0.00    0.00   75.45   24.75     0  stress
22时31分17秒     0     11381    0.20    0.40    0.00    0.00    0.60     0  watch
22时31分17秒     0     11665    0.00    0.20    0.00    0.00    0.20     0  pidstat

平均时间:   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
平均时间:     0     11317   24.75    0.00    0.00   75.05   24.75     -  stress
平均时间:     0     11318   24.95    0.00    0.00   75.45   24.95     -  stress
平均时间:     0     11319   24.75    0.00    0.00   75.25   24.75     -  stress
平均时间:     0     11320   24.75    0.00    0.00   75.45   24.75     -  stress
平均时间:     0     11381    0.20    0.40    0.00    0.00    0.60     -  watch
平均时间:     0     11665    0.00    0.20    0.00    0.00    0.20     -  pidstat

总结:

1.平均负载高有可能是CPU密集型进程导致的
2.平均负载高并不一定代表CPU的使用率就一定高,还有可能是I/O繁忙
3.当发现负载高时,可以使用mpstat、pidstat等工具,快速定位到,负载高的原因,从而做出处理
4.压测过程能很好得知服务器或者服务对硬件设备要求,根据不同需要采购不同设备
5.查清原因解决超额负载
如果是进程造成的负载,查看进程后,具体情况具体操作,不能直接kill杀掉进程。
如果是IO原因造成的负载,不能kill掉进程,会造成系统崩溃,应该重新挂载,具体情况具体操作。
6.平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:是否cpu的确繁忙,还是存在大量io等待,又或者是很多线程抢占cpu。需要根据mpstat和pidstat来分析

posted @ 2020-04-21 18:46  元气少女郭德纲!!  阅读(353)  评论(0编辑  收藏  举报