Linux 常见异常分析,请收好这份排查指南( 二 )


场景二:MySQL中存在没有索引的语句或存在死锁等情况
我们都知道MySQL的数据是存储在硬盘中,如果需要进行sql查询,需要先把数据从磁盘加载到内存中 。当在数据特别大的时候,如果执行的sql语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大 。具体解决方法可以在MySQL中运行show full processlist命令查看线程等待情况,把其中的语句拿出来进行优化 。
场景三:外接硬盘故障,常见有挂了NFS,但是NFS server故障
比如我们的系统挂载了外接硬盘如NFS共享存储,经常会有大量的读写请求去访问NFS存储的文件,如果这个时候NFS Server故障,那么就会导致进程读写请求一直获取不到资源,从而进程一直是不可中断状态,造成负载很高 。
【Linux 常见异常分析,请收好这份排查指南】处理办法
  • load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多 。
  • 出现此种情况时,可能是由于僵死进程导致的 。可以通过指令ps -axjf查看是否存在 D 状态进程 。
  • D 状态是指不可中断的睡眠状态 。该状态的进程无法被 kill,也无法自行退出 。只能通过恢复其依赖的资源或者重启系统来解决 。
等待 I/O 的进程通过处于 uninterruptible sleep 或 D 状态;通过给出这些信息我们就可以简单的查找出处在wait状态的进程 。
ps -e -L h o state,cmd| awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr作者:Honest1y
来源:https://juejin.cn/post/7016127914454286367




推荐阅读