【服务器性能】磁盘IO-wait过高导致http请求pending超时

**问题:**某系统web无法登陆,F12查看登陆请求一直pending,请求pending状态持续了1min,服务器返回status=504超时状态,无法登录。如下图(问题现象登陆校验窗口都没有出来)
问题现象
2 问题分析
前端已经无法登陆,只能上后台开始排查
1 先看httpserver进程是否正常(几天前启动的),pass
2 看who看下是不是有其他人在操作服务器(可能是入侵。。。) ,只有我一个在线。 pass
3 Top命令,查看机器资源消耗情况(如下图):
1)cpu,内存使用占用率都很低 pass
2)但是load average 的高值接近20(cpu逻辑核是40的,看来整体负载不是很高)。 ???
3)iowait 18,这个值是个疑问?经验单iowait<20 系统整体使用是不受影响的 ???
4)系统调度hi,si,st参数全是0无压力 pass
5)磁盘占用df -h(lsblk)磁盘存储无问题 pass
5)这是什么情况? 网络故障吗?
6)从客户端到服务端测试网络连接情况ping -t ,无丢包响应时间小于50ms pass
7)查一圈没有明确找到原因 ,那就继续仔细分析系统的各参数(从可疑的参数入手)
top命令
系统资源情况整体分析,vmstat -w 3 20 分析下系统整体资源情况,通过下图可以确认是就是iowait高而且procs(b)可以看出等等io的队列稳定在11,那么这些排队的资源什么时候回等到io响应?是不是等待io过长导致的 timeout?
vmstat
有iowait那么是什么进程在使用占用io,
通过pidstat找出占用io多的程序。(如下图)可确定只有pika进程独占io,读写都有,排名榜首。
pidstat
怎么解决? 确认该系统不是线上系统环境后,我们就可以kill暴力尝试,直接kill掉pika进程。观察系统资源情况(如下图),iowait从18降到0了,从web登录恢复正常了,可以确定就是该问题就是iowait引起的。
正常状态
PS:如果不能kill进程,那怎么确认问题? 这就会复杂一些,因为已经推测是iowait导致一些进程timeout的,那么怎么确认是不是timeout,通过web服务的log监控日志(配合strace追踪定位服务情况),确认是不是该进程请求等待时间过多导致的超时。定位到原因后确认怎么处理。

总结:
1 通过暴力kill,已经确认是pika进程读写多导致很多程序排队请求io,web服务请求排队超时,所有前端http返回码为504。
2 通过iostat命令长时间观察了读写,写最高是40M/s,读是15M/s,这个数据很低,普通机械磁盘读写峰值在150M/s左右(块大小顺序操作),可见落地到实际应用中磁盘的读写性能和白皮书的差距很大。
3 通过系统资源分析,只有磁盘系统存在瓶颈,看来load aveager的值也是io性能造成的
建议:
1 应用程序优化
2 磁盘性能优化(多盘RAID或者SSD,高转速的机械盘)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值