首页 > 其他分享 >wa很高之排查

wa很高之排查

时间:2024-01-16 11:12:45浏览次数:23  
标签:wa 读写 ---- 排查 io 进程 磁盘 列出

现象:设备按照当前空闲情况是不存在频繁读写磁盘的操作的,但是wa很高又证明在频繁读写

主要判断指标:

%us 过高,则可以在对应服务的线程ID查看具体详情,是否存在死循环,或者长时间的阻塞调用。
%sy 过高,则先使用 strace 定位具体的系统调用,再定位是哪里的应用代码导致的。
%si 过高,则可能是网络问题导致软中断频率飙高。
%wa 过高,则是频繁读写磁盘导致的,可以通过iostat,iotop。

 排查:

  1. 找出具体读写的是哪个磁盘

出现io很高,通过iostat 命令查看io状态信息

iostat只要用于输出CPPU和磁盘IO的相关的统计信息

   格式: iostat 选项 时间间隔 次数

     -c 单独输出Device的信息不包括CPU信息

     -k/m:输出结果以kb或者是mb为单位,而不是以扇区数量为单位

  -x:输出更详细的磁盘io的信息

输出结果的重点参数:

    iowait%:表示CPU等待的是io时间占用整个cpu周期的百分比。

    avgqu-sz表示的是磁盘io的队列长度,即io的等待个数

    await:表示的是io请求时间,等待时间和处理时间

    svctm:表示的是每次请求的处理的时间

    %util表示的是磁盘的忙碌情况,如果>80%就是磁盘可能处于忙碌状态

 

 其中-x知指明输出更加详细的信息。2 5表示间隔2秒统计一次总共输出5次。第一行结果是自系统启动以来的统计值,通常排查突发的I/O异常时可忽略。重点看%util列,表示进程使用I/O的比例

2、找出引起高io的进程

简单的是iotop命令,比如

1
2
3
4
Total DISK READ: 404.95 K/s | Total DISK WRITE: 9.91 M/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                               
 3153 be/3 root        0.00 B/s    3.78 K/s  0.00 %  6.23 % [jbd2/sda5-8]
10287 be/4 mysql     253.57 K/s 1858.24 K/s  0.00 %  3.73 % mysqld --defaults-file=/etc/my.cnf --basedir=/opt/my~--pid-file

 

iotop命令确实是一个很好用的工具,但是很多Linux发行版中默认并没有安装。如果系统里没有这个命令,又不想安装时,怎么办?有没有更简单的方式?

能够实现iotop类型功能的ps命令

首先看下进程状态编码

1
2
3
4
5
6
7
8
PROCESS STATE CODES
 D uninterruptible sleep (usually IO)
 R running or runnable (on run queue)
 S interruptible sleep (waiting for an event to complete)
 T stopped, either by a job control signal or because it is being traced.
 W paging (not valid since the 2.6.xx kernel)
 X dead (should never be seen)
 Z defunct ("zombie") process, terminated but not reaped by its parent.

 

注意到,如果进程正在等待I/O,进行的状态码经常为D。通过这个信息,我们可以大概估算出哪些进程在I/O等待中,比如

1
2
3
4
5
6
7
8
9
10
11
12
[root@myos ~]# for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done
----
----
----
D 27456 php-fpm: pool www
----
----
----

这里就发现进行 27456 可能有问题。但等待I/O也不一定说明它在疯狂读写磁盘。为了确定它确实读写很多,可以用/proc目录下的信息来定位,比如

1
2
3
4
5
6
7
8
[root@myos ~]# cat /proc/27456/io
rchar: 42857442
wchar: 35657666
syscr: 44932
syscw: 9744
read_bytes: 1530859520
write_bytes: 13824000
cancelled_write_bytes: 1249280

3、查看进程频繁读写哪个文件

 

1
2
3
4
5
6
7
8

lsof是一个列出当前系统打开文件的工具,在Linux下,任何事物都以文件的形式存在,通过文件不仅可以访问数据,还以访问网络连接和硬件。
lsof 选项 参数
-a 列出打开文件存在的进程
-c 列出指定进程打开的文件
-p 列出指定进程打开的文件
-u 列出uid号进程详细
+D 递归列出目录下被打开的文件
-d 列出占用该文件的进程
——————————————

 

引用大佬:https://www.cnblogs.com/wyf0518/p/12213790.html

标签:wa,读写,----,排查,io,进程,磁盘,列出
From: https://www.cnblogs.com/Mamie/p/17967195

相关文章

  • cpu过高什么原因?怎么排查?
    运行大型程序或应用程序:当计算机运行大型程序或应用程序时,CPU需要处理更多的数据和指令,因此CPU占用率会相应地增加。病毒或恶意软件:某些病毒或恶意软件会占用计算机的CPU资源来执行恶意任务,例如加密文件或执行网络攻击。软件或驱动程序错误:某些软件或驱动程序可能存在缺陷,导致C......
  • SD-WAN究竟是SD了什么?
    科技的不断发展,SD-WAN(软件定义广域网)已成为企业网络架构中的一种创新技术,带来了许多变革。但问题在于,SD-WAN究竟是SD了什么?让我们深入研究,探讨SD-WAN在广域网领域所实现的软件定义是什么以及带来的影响。首先,我们需要理解“软件定义”的本质。软件定义(SD)是一种思想,旨在通过软件来管......
  • 盘点Gateway-Worker启动的九种报错和解决方法
    Workerman是一款开源高性能异步PHPsocket即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mys......
  • 转载一篇 vb.net await 工作顺序
    VB.net-异步编程之asyncawait结构的学习芯艺在.net中有一种非常先进的异步编程机制,那就是async和await组成的异步方法调用,用好这两个关键字可使异步程序就象同步代码一样简洁易懂。async用于指定一个方法为异步方法,实际上就是告诉编译器该方法内有await等待,需要将此方法中......
  • windows下直接把文件夹打包成war包
    windows下直接把文件夹打包成war包在windows中把一个文件夹打成war包一般开发打war包时都是用MyEclipse或IntelliJIDEA等直接导出war文件,这里介绍一种如何把一个文件夹打成war包的方式,如下例如要打包的文件在D:\testWar打开cmd命令行窗口,进入文件所在目录D:\testWar然......
  • 2023年最新!window10于VMware安装教程
    2023年最新!window10于VMware安装教程导航目录2023年最新!window10于VMware安装教程导航一、下载ISO镜像文件二、VMware进行配置三、启动并配置虚拟机一、下载ISO镜像文件自行在网上搜寻想要下载的版本,我这提供MSDN的下载链接:https://www.xitongku.com/,纯净无广告二、VMw......
  • mvc5接口报错:The JSON request was too large to be deserialized的一种原因
    是mvc5版本的接口,接口使用了dynamic接收数组,json对象数组只有56个,length长度不到10万,但是提交就报TheJSONrequestwastoolargetobedeserialized这个错。在.netcore中,dynamic是不需要前端把字段用stringfy序列化为字符串的就能处理的。但是mvc5如果不在前端把dynamic接收......
  • 关于k8s关闭swap分区与swappiness设置的问题
    1、基于其出发点,k8s希望将资源限制在一个严格,精确可控范围内:Kubernetes云原生的实现目的是将运行实例紧密包装到尽可能接近100%:所有的部署、运行环境应该与CPU以及内存限定在一个可控的空间内。所以如果调度程序发送一个Pod到某一台节点机器,它不应该使用Swap。如果使用sw......
  • vmware ESXI6.5安装统信uos release 20 (fuyu)系统
    vmwareESXI6.5安装统信uosrelease20(fuyu)系统centos7系统到2024.6.30号左右停止维护,开始适配国产操作系统,本次安装统信uos操作系统,官方已经免费授权了一、下载统信uos操作系统免费授权信息:https://www.chinauos.com/resource/download-server-ufu免费下载镜像:https://......
  • [Rust] Rust开发Wasm运行到支付宝小程序
    Rust开发Wasm运行到支付宝小程序最近参加了支付宝小程序开发者大赛,把我之前的RustNES项目(任天堂红白机游戏机模拟器,可以玩小霸王上的马里奥,冒险岛等)迁移到了支付宝小程序上,发现相关内容网上的资料比较匮乏,在此分享一下开发经历.本项目两大核心点Rust编译成Wasm运......