Linux 上接口卡顿异常排查(IO 异常)

前提:

客户现场有一台服务器,由于现场断电,导致服务器强制重启了,重启之后web可以访问但接口异常卡顿。

排查故障:

  1. 第一个就怀疑是网络问题,因为服务只是重启了,web也能登录,所以怀疑是企业的路由器故障了,导致web卡顿,但是经过排查、测速,并不是这个原因

  2. 第二个怀疑是系统资源不足,但是排查了内存和磁盘占用之后发现并没有异常

    # 查看内存占用
    top
    # 查看磁盘占用
    df -h
    
  3. 第三个排查业务代码,使用阿里巴巴的Arthas工具

    # 由于我的服务是用docker部署,需要进入容器内进行监控
    docker exec -it my-web bash
    # 下载arthas包
    curl -O https://arthas.aliyun.com/arthas-boot.jar
    # 启动监控,注意如果服务器无法联网,需要下载arthas-bin.zip包解压之后执行 ./install-local.sh 安装所需组件,再启动监控
    java -jar arthas-boot.jar
    # 启动之后根据提示选择对应的java进程 比如 1
    # 使用trace指令监控卡顿的接口函数,这个指令可以记录函数的调用耗时
    trace com.chemcyber.web.myflow.screen.service.impl.FlowManageScreenServiceImpl getOperationTicket
    

    1752198508663_d.png

    经过排查,找到了查询慢的sql,拿到数据库里面直接执行,发现竟然时快时慢。。。真是头大

  4. 第四步,经过不断的网上查找,以及提问AI,建议我排查一下系统IO,于是

    # 监控IO占用
    iostat -x 1
    

    1752199058244_d.png

    可以看到IO占用竟高达99%,到这里总算是找到了大致的方向了,于是继续排查

    iotop -oP
    

    可以看到是mysql占用了大量的IO(这个截图找不到了),经过一顿搜索,卡顿的原因是服务器异常断电重启后,MySQL自动进行崩溃修复,因此占用大量IO,以下是临时缓解办法(记得修改之前先查询当前配置,方便后续恢复回去)。

    -- MySQL临时降低写入压力
    SET GLOBAL innodb_flush_log_at_trx_commit = 2;
    SET GLOBAL sync_binlog = 0;
    
    -- 优化InnoDB配置
    SET GLOBAL innodb_io_capacity = 2000;
    SET GLOBAL innodb_io_capacity_max = 4000;
    
    -- MySQL关键调整(立即生效)
    SET GLOBAL innodb_io_capacity=4000;
    SET GLOBAL innodb_flush_neighbors=0;  -- SSD必须关闭
    SET GLOBAL innodb_adaptive_flushing=ON;
    -- 增加缓冲池
    SET GLOBAL innodb_buffer_pool_size = 12G;  # 建议物理内存的50-70%
    
  5. 再次查看IO状态,发现一顿操作下来,IO占用竟然没有丝毫改善。。。

    # 查询磁盘写入速度(该命令会创建一个名为testfile的1GB文件,并将零值数据写入该文件。通过使用oflag=direct参数,可以绕过操作系统缓存,直接测试磁盘的写入性能)
    dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
    # 等待命令执行完成。在完成后,dd命令将显示读取的数据量、所用的时间和读取速度等信息。
    

    image.png

    磁盘写入速度只有100MB/S,这里判断可能是磁盘故障了,没办法了,只能等mysql自动修复了,第二天再看看。

  6. 一觉睡醒后,第二天果然恢复正常了(记得把之前改的mysql配置恢复回去)。

  7. 后续处理:排查服务器硬盘是否异常,需要更换硬盘,如果服务器做了Raid阵列(比如Raid5),可能是有其中一块盘坏了,导致整体写入速度变慢。

上一篇
摸鱼周报 20250711
试一下写这个吧…… 手头还有三张图和一个报告没有完成,但是明天就要交了。 拖延症啊~~ 想想我这周到底做了什么……? 周一,去驾校报了名,然后在家躺尸 周二,练了会儿车,玩荒野大镖客2 周三,画了一张图,继续玩荒野大镖客2,下午练车了 周四,画了一张图,玩荒野大镖客2 周五。。。大表哥2太好玩了…… ....
下一篇
新人?报道
无聊的中年社畜妄图在网络上寻找到时间胶囊(划掉)。。。。。。 按照时间线的走向 那应该是 龙珠/海贼王(顶上战争截止)/银魂/一人之下。。。 魔兽世界/LOL/战锤/猎魔人/暗黑/魂类。。。 出去玩的目的是寻找到各地美食。。。 总结起来就是爱吃的中年油腻死肥宅。。。
时间排序
新人报道 -- 求分享 vsc 插件 《摸鱼秘史:血泪无声》Ⅰ 新人报道!!(*^▽^*) 新人报道 (骑车一定要小心) 新人?报道 Linux 上接口卡顿异常排查(IO 异常) 摸鱼周报 20250711 新人报道 ^^ 我这种情况到底适不适合养边牧啊? 三天打鱼俩天晒网 汉兜 0711
上一篇
用人工智能复刻银河奶牛放置(水贴)
闲来无事,用Cursor复刻一下奶牛放置,看看AI的能力,以下是与AI的对话记录,页面截图在结尾。 银河奶牛放置游戏介绍 Exported on 2025/7/3 at GMT+8 10:43:02 from Cursor (1.1.7) User 你知道银河奶牛放置是一个什么样的游戏吗 Curso ....
下一篇
【笔记】三维建模 3Dtiles 模型的位置参数说明
用cesium.js加载三维建模文件,发现地图位置偏了,需要调整文件的参数以和实际的位置吻合,经过搜索之后记录了配置文件的主要参数含义。 文件名:tileset.json {......,{'transform':[ -0.895779807996946,-0.444498071519951,0.0 ....
当前作者
【南瓜的厨房】去骨柠檬酸辣鸡爪 【南瓜的厨房】美味洋芋粑 摸鱼周报 20250808 【分享】Docker 镜像源 【笔记】三维建模 3Dtiles 模型的位置参数说明 Linux 上接口卡顿异常排查(IO 异常) 用人工智能复刻银河奶牛放置(水贴) 【南瓜的厨房】凉拌牛肉 基于 Supabase+Vue3 的 Cursor 人工智能开发实践 Ubuntu 安装 Gitee-Mcp 新人报到,请多关照!
上一篇
新人报道 -- 求分享 vsc 插件
终于找到组织了! 本来只是coding的时候想摸鱼,在vscode里找那种可以在状态栏摸鱼看小说的插件。搞了半天没找着 然后让我发现了这个插件,新人摸鱼(有啥好物请分享给我 谢谢!)
下一篇
汉兜 0711
汉兜 1288 4/10 ️🟩️️ ️🟩️🟩 🟩🟩️🟩 🟩🟩🟩🟩 handle.antfu.me
热门排序
摸鱼周报 20250711 好像干了不少但好像啥也没干 说出你们唯爱的歌手或乐团—我倾情推荐“打扰一下乐团 (Excuse me)” 比伯发歌了!!!!今昔是何年!!!! 摸鱼周报 20250711 带专被骗到到国企的第三周 新人报道 -- 求分享 vsc 插件 Linux 上接口卡顿异常排查(IO 异常) 汉兜 0711 憨豆 · 1287 汉兜 1277 4/10 来自内蒙古的新人报道 摸鱼周报 2025/06/27