zoukankan      html  css  js  c++  java
  • Nginx 499 排查到docker 中一个进程一直在空转

    现象:

    Nginx日志在凌晨(2~9点) 中出现了大量499状态码的请求,9点钟以后几乎没有再出现499的状态码

    解决:

    早上来了业务部门通知让查看系统是否运行正常,查到了凌晨 Nginx 日志中出现了大量 499 的日志信息,上班以后都正常了,一开始没有头绪。就去问了运维,运维说凌晨的时候MySQL 备份磁盘满了,程序报错了,以为找到原因了,接下来就是把丢失的数据补充进去。

    结果下午的时候又出现了499 的报错信息,这个时候查看了一下 CPU,几乎快满了,然后运维帮忙看了磁盘读写比例很高,也就是一直在读写磁盘占用了大量的CPU。第一时间分析以为是业务日志信息写入磁盘导致的CPU很高,业务里面是一条条写日志的,自己想可不可以批量写入磁盘,减少io请求,增加吞吐量(ps: 这个时候已经跑偏了)。

    下午的时候看到 docker 中有一个进程CPU 占用很高,自己感觉正常就没有在意。

    晚上下班了以后,又分析了一波,既然docker的CPU占用这么高,怎么看docker的资源消耗呢?

    使用 docker stats

    查看了docker 资源的消耗,发现有一个进程占用了 docker 百分之90多的CPU,进行这个容器中查看了一下这个进程的命令,是在读取一个文件,看了一下目录里面这个文件并不存在,自己确认了一下,然后就把这个容器关掉了。关掉以后 CPU占用从 60多 降到了30多,也就是这个空转的进程占用了大量的CPU消耗。

    复盘:

    Nginx 499 错误码 4xx 开头都是客户端报错

    维基百科定义:
    499 ClientClosed Request(Nginx):
    Used in Nginx logs to indicate when the connection has been closed by client while the server is still processing itsrequest, making server unable to send a status code back。

    服务器返回http头之前,客户端就提前关闭了连接,也就是说明是我们服务端处理的速度比较慢

    那么下一次如何更好的定位到这个信息呢?

    1.要了解top 命令的使用以及参数信息

    负载:时间,登录用户数,系统平均负载

    进程:运行,睡眠,停止,僵尸

    cpu: 用户态、核心态、NICE、空闲、等待IO、中断等

    内存: 总量、已用、空闲(系统角度),缓冲,缓存

    交换分区:总量、已用、空闲

    任务区域默认显示:进程ID、有效用户、进程优先级、NICE值、进程使用的虚拟内存、物理内存和共享内存、进程状态、CPU 占用率、内存占用率、累计CPU时间、进程命令行信息。

    在使用top 的时候使用c,查看执行的进程命令信息。

    2.补充对基础知识的掌握,操作系统的使用和理解

    参考文章:

    服务器排障 之 nginx 499 错误的解决 https://blog.51cto.com/yucanghai/1713803

    top linux 下的任务管理器 https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/top.html

    Linux Performance Observability Tools

  • 相关阅读:
    缅怀
    74LS164的使用
    跑步
    Datasheet,你会读么?[转]
    清华附小给的书单
    iOS-小知识
    网络-GET&POST
    网络-基础
    网络-HTTP其他常见方法
    数据解析
  • 原文地址:https://www.cnblogs.com/zhangpengfei5945/p/14437058.html
Copyright © 2011-2022 走看看