Linux内存很低CPU满,Linux中CPU使用率低负载高

Linux中CPU使用率低负载高

一、原因总结

等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就导致负载过大,但cpu使用率低。

二、场景分析

(1)磁盘读写请求过多就会导致大量I/O等待

cpu的工作效率要高于磁盘,而进程在cpu上面运行需要访问磁盘文件,这个时候cpu会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候会切换到其他进程或者空闲,这个任务就会转换为不可中断睡眠状态。当这种读写请求过多就会导致不可中断睡眠状态的进程过多,从而导致负载高,cpu低的情况。

(2)MySQL中存在没有索引的语句或存在死锁

MySQL的数据是存储在硬盘中,如果需进行sql查询,要先把数据从磁盘加载到内存中。当在数据特别大的时候,如果执行的sql语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大。

(3)外接硬盘故障,常见有挂载了NFS,但是NFS Server故障

假如系统挂载了外接硬盘,如NFS共享存储,经常会有大量的读写请求去访问NFS存储的文件,如果这个时候NFS Server故障,那么就会导致进程读写请求一直获取不到资源,从而进程一直是不可中断状态,造成负载很高。

备注:只有运行状态(running)和不可中断状态(uninterruptible)才会被加入负载。

在top和ps命令中有一列显示进程状态,分别有如下值:

含义

S

进程处于interruptable sleep状态

D

进程处于Uninterruptable sleep状态

R

进程处于运行状态

Z

进程处于僵尸状态

T

Stop模式,进程要么处于被调试状态

【S进程】

进程等待某个资源处于sleep状态,此时可以通过发送信号将这个进程唤醒。例如发送kill 信号。

【D进程】

进程在内核中某些不能被信号打断,例如对某些硬件设备进行操作时刻(等待磁盘Io,等待网络io等等)。

进程处于D状态一般情况下很短暂,不应该被top或者ps看到。

如果进程在top和ps看到长期处于D状态,那么可能进程在等待IO时出现了问题导致进程一直等待不到IO资源,此时如果要处理掉这个D进程,那么只能重启整个系统才会恢复。因为此时整个进程无法被kill 掉。

【Z进程】

僵尸进程。

在Linux中,每个进程都有一个父进程,进程号叫PID(Process ID),父进程号叫PPID(Parent PID)。当进程死亡时,会关闭已经打开的文件,舍弃已经占用的内存,交换空间等公共资源,然后向父进程返回一个退出状态值,报告死讯。

如果在报告的过程中出了问题,父进程不知道子进程死了,子进程便变成了僵尸。

Linux中,可以通过杀死父进程的方式来让子进程消失。但是,僵尸进程并不占用任何资源,只是错误显示,如果父进程正在跑业务,千万不可以贸然杀死父进程。

喜欢 (0)or分享 (0)

bc2536a386bdad0f3a5b1b723479c3dc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值