记一次脏数据堆积引发夯机

逸兴
逸兴
逸兴
57
文章
25
评论
2022-11-0118:28:03记一次脏数据堆积引发夯机已关闭评论 1811字阅读6分2秒
```
系统版本:
CentOS Linux release 7.4.1708 (Core)
内核:
3.10.0-957.5.1.el7.x86_64
```
### 故障详情
前一个小时有内存使用率高告警, 然后服务器平均负载急剧升高, 出现业务应用响应慢, ssh连不上问题。
控制台报: echo 0 > /proc/sys/kernel/hung_task_timeout_secs
![](https://image.lastack.top/static/2022/10/snipaste_20221031_152632.png)服务器重启后, 业务应用恢复。
### 故障分析
日志中有多次报 “echo 0 > /proc/sys/kernel/hung_task_timeout_secs” , 这个报错是因为 文件系统缓存问题, 默认情况下Linux会把可用内存的40%作为文件系统缓存使用, 这部分缓存一旦用满, 文件系统会立刻将缓存的内存刷新到磁盘, 但是这里的刷新并非移动而是复制, 复制完成后这部分空间才会释放, 这就导致后续的IO请求都是同步的, 而它复制的时候有120s的超时时间。
如果IO系统响应慢, 没能在120s内将缓存写入磁盘, 就会出现echo 0 > /proc/sys/kernel/hung_task_timeout_secs, 同时也会导致越来越多的请求堆积在内存, 最终导致系统内存被全部占用, 系统宕机。尤其是在大内存的机器上, 这种情况尤为明显。
**结合监控数据, 也从侧面印证了这一点:**
九点半左右磁盘读写量有明显升高
![](https://image.lastack.top/static/2022/11/image-2.png)IO耗时也相应增加
![](https://image.lastack.top/static/2022/11/image-3.png)逻辑CPU64核, 平均负载却到了100左右, 推测也是上面io wait的问题。
![](https://image.lastack.top/static/2022/11/image-4.png)### 调优
出现阻塞问题的直接原因是缓存满了, 大量的缓存数据要写入外存, 导致IO性能大量消耗, 那么要缓解这种情况, 我们可以从两个方面进行调优:
1. 减少缓存的数据量, 避免刷写超时
2. 加快缓存的更新, 避免缓存堆积, 以处理更多的IO
可以使用这四个参数配置:
**vm.dirty_background_ratio:** 内存可以填充“脏数据”的百分比, 脏页数量达到后就会触发pdflush/flush/kdmflush等后台回写进程,将一定缓存的脏页**异步**地写入外存。
**vm.dirty_ratio:** 绝对的脏数据限制, 如果内存中的脏页数量超过了这个值, 将强制刷新到外存, 这个过程是**同步**的, 也就是新的IO请求会被**阻塞**, 直到刷新完。
**vm.dirty_expire_centisecs:** 脏数据的存活时间, 默认30s, 当pdflush/flush/kdmflush等回收进程启动后, 会检查是否有数据超过了这个时间, 如果有就把它**异步**的写入外存。
**vm.dirty_writeback_centisecs:** 指定多长时间 pdflush/flush/kdmflush 这些进程运行一次。
> **vm.dirty_background_ratio**与**vm.dirty_ratio**都是可以脏数据可以使用的内存的百分比, 其区别在于回写方式, 一个异步一个同步。建议**vm.dirty_ratio** > **vm.dirty_background_ratio**
#### 配置方式:
```
#临时修改:
sysctl -w vm.dirty_ratio=10
sysctl -w vm.dirty_background_ratio=5
sysctl -p
#永久修改:
vi /etc/sysctl.conf
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
sysctl -p
#查看:
cat /proc/sys/vm/dirty_background_ratio
cat /proc/sys/vm/dirty_ratio
cat /proc/sys/vm/dirty_expire_centisecs
cat /proc/sys/vm/dirty_writeback_centisecs
```


https://www.hugbg.com/archives/3547.html
逸兴
  • 本文由 发表于 2022-11-0118:28:03
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Mac pip安装mysqlclient报错 默认分类

Mac pip安装mysqlclient报错

问题详情 环境: Mac OS14.4, Python3.10, Django 5.0 mac 上使用docker运行了一个mysql容器, 然后终端中安装了brew install mysql-cl...
redis弱密码漏洞利用及防御 默认分类

redis弱密码漏洞利用及防御

一、概述 1.1、redis简介 Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,也被称为缓存数据库,它提供了高性能、可扩展、支持多种数据结构的键值存储。由...
记一次Linux中毒处理 默认分类

记一次Linux中毒处理

一、问题描述 华为云的一台测试机配置2c4g, 只运行了一个静态网站平常访问量也不大,但是平均负载达到了1.0, 其中一个cpu核心使用率100%, top命令查不到占用cpu的进程基本能够确定中毒了...
/boot误删除,重建 花里胡哨

/boot误删除,重建

故障现象: 中午一线同事说服务器登不上了密码不对,要重新同步密码,试了一下能ping通,ssh连不上,登录idrac查看,结果卡在登录这一块。登录程序一直在输入用户名部分循环。 看样子不是密码不对,估...