现象:

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

Nginx 499 排查到docker 中一个进程一直在空转的更多相关文章

  1. 服务器中一个进程kill不掉,如何处理?

    问题描述: 我们在服务器中有时候kill一个进程,会碰到死活杀不死的情况,那么有可能这个进程成为了一个僵尸进程,zombie状态.这种情况是这个进程释放了资源,但是没有得到父进程的确认. 可以使用命令 ...

  2. 理解Docker容器的进程管理

    摘要: Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per container)&qu ...

  3. docker中的安全机制

    有时候我们需要容器具有更多的权限,像如操作内核模块,控制swap交换分区,挂载usb磁盘,修改mac地址等.所以我们今天进行docker的安全设定. 一.使用docker命令设置docker的安全机制 ...

  4. linux 中的进程wait()和waitpid函数,僵尸进程详解,以及利用这两个函数解决进程同步问题

    转载自:http://blog.sina.com.cn/s/blog_7776b9d3010144f9.html 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / wait ...

  5. 一次docker中的nginx进程响应慢问题定位记录

    有个ft测试的环境,其中nginx使用docker发布的.测试用例是curl的时候,没有获得nginx的响应. docker ps CONTAINER ID IMAGE COMMAND CREATED ...

  6. 滚动 docker 中的 nginx 日志

    Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...

  7. Docker: docker 启动一个Nginx容器

    本文演示从官方镜像仓库拉取一个nginx镜像并启动docker run -d –p 8800:80 nginx (同一个镜像,可以启动N个容器, 比如说,一个nginx服务,可以在这个docker主机 ...

  8. 用Docker搭建一个支持https的nginx代理服务

    用Docker搭建一个支持https的nginx代理服务 说明:本文所提的服务只是作者平常测试使用,可能含有未知bug或不成熟的解决方案,仅供参考,请不要用于正式环境,当然,使用过程中有任何问题欢迎提 ...

  9. 解决docker中使用nginx做负载均衡时并发过高时的一些问题

    # 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...

  10. nginx中父子进程工作的主体函数

    依据Nginx(0.7.67版本号)的代码.对Nginx主要的进程创建,进程主体以及事件处理进行了简要的分析. 基本上,父进程(即主进程)一開始会初始化及读取配置.并载入各模块的功能,然后fork() ...

随机推荐

  1. php7有哪些新特性

    目录 太空船操作符 标量类型声明和返回值的类型说明 null 合并操作符 常量数组 namespace 批量导入 非混合模式的 use 声明 混合模式的 use 声明 复合模式的 use 声明 thr ...

  2. 史上最全EffectiveJava总结(二)

    方法 49.检查参数的有效性 每次编写方法或构造函数时,都应该考虑参数存在哪些限制,并在文档中记录下来,然后在方法的开头显式地检查. 如果没有在方法开头就验证参数,可能会违反故障原子性.因为方法可能会 ...

  3. PII is hidden.

    使用 Microsoft.AspNetCore.Authentication.JwtBearer 做验证的时候报错如下: IDX10503: Signature validation failed. ...

  4. Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战

    Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战 一.概述 Browser-use 是一个旨在将 AI "智能体"(Agents)与真实浏览器进 ...

  5. Fast Prefix Sum Implementation Using Subgroups in GLSL Compute Shaders

    利用 Vulkan 1.1 的 subgroup 特性加速 ComputeShader 的前缀和计算,参考: Vulkan Subgroup Tutorial - Khronos Blog - The ...

  6. .net WorkFlow 流程传阅

    WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...

  7. MySQL 默认的事务隔离级别是什么?为什么选择这个级别?

    MySQL 默认的事务隔离级别是什么?为什么选择这个级别? 在 MySQL 中,默认的事务隔离级别是 可重复读(Repeatable Read).这是 InnoDB 存储引擎的默认事务隔离级别. 为什 ...

  8. nndeploy开源推理框架教程来袭,模型推理全流程,轻松上手,一键精通!

    大家好,我们是 nndeploy 开源团队.我们专注于打造一款端到端的模型推理和部署框架 -- nndeploy,旨在为用户提供高效.便捷.灵活且兼容主流框架的模型推理和部署体验. 此次,我们开发了 ...

  9. Linux TCP网关的线程结构方案

    如果所示: 无论客户端还是服务端链接网关的socket都拆分为读EPoll.写EPoll分别独立. 有两个线程:线程A(左).线程B(右): 线程A负责服务端Socket的读和客户端socket的写, ...

  10. K8s新手系列之ConfigMap资源

    概述 在 Kubernetes(K8s)中,ConfigMap 是一种 API 对象,用于将非机密性的数据保存到键值对中.Pod 可以将其用作环境变量.命令行参数或者存储卷中的配置文件. Config ...