龙空技术网

如何诊断 NGINX内存溢出(OOM)

温瑞安 200

前言:

而今各位老铁们对“splunknginx”大概比较珍视,同学们都需要分析一些“splunknginx”的相关资讯。那么小编在网络上搜集了一些对于“splunknginx””的相关内容,希望咱们能喜欢,姐妹们一起来了解一下吧!

背景

Nginx 部署于linux操作系统做为WEB层反向代理来自外部的网页或者API请求

问题

Nginx运行过程中会因为OOM问题,其进程会被linux内核杀掉,从而导致服务端连接请求失败或者超时

如何诊断

1 通过log索引分析工具,找出OOM的发生模式,是时常发生?是否具有一定的周期性?具体来说,查找OOM暴露出来的关键字,比如:“Out of memory"从索引工具生成问题发生频率图,确定问题发生的时间周期模式。

2 搜集内存有关的数据

2.1 操作系统级别的内存报告,这些数据会通过部署在虚机上的代理(比如:vmstat/free etc)索引进入日志管理系统比如:splunk 或者ELK,看操作系统内存消耗会不会呈现和问题发生相同的模式。

2.1 进一步分析,从进程级别,分析某个时间点上操作系统哪些进程消耗掉了大部分内存,基于命令比如(ps/top)可以知道哪些进程吃掉了内存。然后用这里得出的结果, 反过来通过延申时间看是不是和以上两者具备相同的发生模式。

3 解决问题关键

3.1 具备全局的日志索引系统,可以搜集nginx集群各个机器的不同层次的数据,并能给出图形化的展示。

3.2 对nginx架构有基本的理解,比如:一个主进程用来管理多个从进程,内存消耗主要来自虚拟主机的配置的数目和系统接收的外部流量。这些基本知识可能帮助,早期还未发现OOM的时候,追踪跟到内存溢出。

结语

其实对任何系统报出来的OOM问题都可能采用相同的思路:发现问题,形成模式,找促成因素,解决问题。

标签: #splunknginx