故障现象

在3节点组成的大数据集群中,混部了 ES,kafka,zk,pg,mysql,spark,yarn,hdfs,以及业务的 etl 程序等组件。起初发现业务进程处理数据速度很慢,排查后发现数据盘 /data01 的 util 接近100%

但是磁盘吞吐量并不高,IO 流量只有2MB 左右,主要是由 w/s 导致,也就是写入的 iops 高,这种情况一般就是进程的 sync 操作密集。

分析过程

通过 iotop 来查看是哪个进程,显示为 jbd2

查阅一些资料后,了解到 jbd2进程负责 ext4这种日志文件系统的日志提交操作,关于jbd2引起磁盘 io 高,网上也有很多类似案例,总结起来有几方面原因:

  1. 系统 bug
  2. ext4文件系统的相关配置问题
  3. 其他进程的 fsync,sync 操作过于频繁

首先排除系统 bug因素,网络上反馈的问题在很低的版本,我们生产环境为 Centos 7.4,其次,查阅了 /proc/mounts 等信息,发现文件系统配置参数与其他环境差异不大,按照网上提供的关闭某些特性,降低 commit 频率等理论来说会有效果,但需要重新 mount 磁盘,相关组件都要重启,并且这看起来并非根本原因。

尝试分析 sync 调用,使用 sysdig 最方便,但现场环境安装很麻烦,因此开启几个内核 trace查看:

在 jbd2执行 flush 时输出日志

1

2

3

echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enable

在任意进程执行 sync 时输出日志

1

2

3

echo 1 > /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable

然后观察日志输出:

1

2

3

cat /sys/kernel/debug/tracing/trace_pipe

输出信息如下:

可以看到 jbd2和 java-17417进程有大量的 sync,瞬间刷出大量日志,因此基本确定 java-17417进程。17417为 java 进程的 tid,ps 看一下是哪个任务导致的:

1

2

3

ps -efL |grep 17417

-L 或-T 参数显示线程 id,ps 获取到 pid 和程序路径后,发现是 zk 进程,很让人疑惑,zk 怎么会大量 sync 呢,trace 一下他在做什么:

1

2

3

strace -f -p 17417

输出信息如下:

根据 fd 号去看看这是什么文件:

1

2

3

ll /proc/{zk_pid}/fd/74

发现是 log.xxx,是 zk 的事务日志,zk 频繁写事务日志,是由于对 zk 执行了大量写操作导致的。为了确认是 zk 引起的问题,将 zk 的数据路径修改到其他盘,重启 zk 节点,发现变成其他盘的 util 跑满了,到此为止确认是 zk 引起的。

解决方式

经过与业务沟通后,确认是业务进程设计不合理,对 zk 执行大量写操作,暂时采取临时措施,将 zk 的数据路径调整到系统盘,系统盘为 ssd

没有相关文章.

(转载请注明作者和出处 easyice.cn ,请勿用于任何商业用途)

一次 jbd2进程导致磁盘 io 高的分析解决过程相关推荐

  1. centos6下jbd2进程占用大量IO处理

    刚在尝试重现一个bug时,好像在killed mysql一段时间之后,io一直很高,如下: 12:40:01 PM CPU %user %nice %system %iowait %steal %id ...

  2. jbd2 mysql_centos6下jbd2进程占用大量IO处理

    刚在尝试重现一个bug时,好像在killed mysql一段时间之后,io一直很高,如下: 12:40:01 PM CPU %user %nice %system %iowait %steal %id ...

  3. pidstat_Linux查看某个进程的磁盘IO读写情况 pidstat

    一.现象 1)钉钉告警不断,告警如下CPU使用达到100% 普罗米修斯监控 2)查看数据库,没有发现比平时同一时段,业务量的增加.但是,数据库显示latch free等告警,验证了CPU使用过高导致. ...

  4. StarRocks过期数据清理导致磁盘IO飙升调查

    StarRocks过期数据清理导致磁盘IO飙升调查 背景 在StarRocks运行过程中,经常看见某一个be节点的磁盘IO忽然飙升几分钟,然后降下来. 调查结果 翻阅了一些日志和源码,找到了原因,记录 ...

  5. linux+平均磁盘请求数量_SUSE LINUX下磁盘IO性能监测分析

    这两天发现一台测试用的服务器经常负载很高,但cpu和内存消耗却很少,很是奇怪,经过诊断发现是由于大容量的测试数据导致高并发下的磁盘IO消耗比较大,由于缓存是小文件并且数量比较大,所以并发比较高的情况下 ...

  6. Oracle数据库服务器IO高的分析方案和案例探讨

    Oracle数据库服务器IO高的分析方案和案例探讨 本文原题<ORACLE数据库服务器IO高的分析方案和案例探讨> 目录: 慧眼识珠--服务器磁盘这么繁忙,到底是谁干的? 谨记于心--OR ...

  7. Java进程占用内存过高,排查解决方法

    Java进程占用内存过高,排查解决方法 参考文章: (1)Java进程占用内存过高,排查解决方法 (2)https://www.cnblogs.com/eeexu123/p/10913389.html ...

  8. 服务器提示临时文件已满,win10系统提示”由于临时文件夹已满而导致“磁盘空间不足”错误的解决办法_win10教程_uc电脑园...

    如果你已使用"磁盘清理"释放设备上的空间,然后看到"磁盘空间不足"错误,这可能是因为你的临时文件夹正在被 Microsoft Store 使用的应用程序 (.a ...

  9. 由于Redis后门漏洞导致服务器被注入挖矿脚本解决过程

    由于Redis后门漏洞导致服务器被注入挖矿脚本解决过程 事件描述 某一天的早晨,我还是像往常一样搭着公交车开启打工仔的一天,一早8.30就到办公室了,坐着玩手机等上班,就这这时突然我组长飞快的回来办公 ...

最新文章

  1. -bash:command not found
  2. 关于规则引擎一些基本理论的积累
  3. 系统安装操作优化:chapter4 多系统的安装与管理
  4. 原:开辟内存时,可以以结构体为单位,这样测试,是对的吧?
  5. Linux系统的操作命令
  6. Linux 通过命令行下载、上传文件到百度网盘(bypy)
  7. 老生长谈的$.extend()方法
  8. 国科大学习资料--操作系统(杨力祥)--2016年思考题(含解答)
  9. eda技术试卷_EDA技术试题库-试题库
  10. Myeclipes 10 cracker.jar破解文件指定路径错误
  11. Cannot resolve MVC View
  12. 线性代数《Linear Algebra and Its Application》学习总结
  13. 计算机l符号代表什么意思,衣服sml代表什么意思 分别是什么的标记
  14. Python画爱心——一颗会跳动的爱心~
  15. 【APUE笔记】第十二章 高级I/O
  16. 元素布局之排排坐、对齐齐
  17. loadrunner入门教程(6) --新建脚本
  18. 三、SM1P步进电机控制器操作说明
  19. 最小二乘法拟合圆公式推导及vc实现
  20. java 二叉树第n层节点数及层序遍历

热门文章

  1. 从零实现3D图像引擎:(10)Hello3DWorld
  2. PLC实现入栈出栈功能(SCL)
  3. 试驾两厢、三厢马自达2(转)
  4. Qt中的拖拽(针对两个界面之间的拖动)
  5. java毕业设计房产销售系统mybatis+源码+调试部署+系统+数据库+lw
  6. 【星雨语音识别控制系统】星雨语音识别控制系统 V1.1官方免费下载_正式版下载-多特软件站...
  7. ApowerPDF垃圾
  8. conv2、imfilt、ifft2之间的区别与联系
  9. 诺基亚手机运行linux,诺基亚专业相机安装包泄露:非诺基亚手机也可运行
  10. APS期刊投稿准备: REVTex格式