生产环境内存泄漏问题排查,以下是排查思路
 
生产环境上有严重的内存溢出问题(红色框所示,正常值应为是 20M 左右)
同时系统有 Core Dump 文件产生
排查过程中还发现一个现象,如果关闭 OPcache ,则 RES值 恢复正常
 

生产环境的 core-php-fpm-7-502-502-29964-1563021407 文件,

从文件名中可知 php-fpm 进程有异常产生,

core文件是二进制格式,需要专门的工具进行分析。

yum -y install gdb 安装分析工具
 

用工具分析后,得知粗略的报错信息。

Google 搜索了一下,基本上都是这个意思。
那么问题来,生产环境上,app_debug 是关闭的,模板是使用静态缓存的,opcache 也是启用的,为什么还会有这种情况呢?
初步怀疑,有可能是缓存文件失效了,先在测试环境验证下
 
查一下【Server模块】的Runtime目录
 发现Runtime目录下只有一个文件,访问不同页面的时候,这个文件会不断变化。
(也就是说,此模块下缓存文件实际上是无效的)
 
 再查一下【Marketing模块】的Runtime目录(说明缓存文件有效)

 
结合以上两图,说明了三件事:
1、缓存文件有生成
2、缓存文件不断被删除,又不断重新生成
3、一个模块正常,一个模块异常,说明问题应该在 BaseController.class.php 文件中
 

比对两个模块的 BaseController.class.php 基类文件,发现多出了白色箭头处的代码

 
这段代码,“看起来挺正常”,
断点调试 dump( C('not_first') ) ,
发现每一次执行,得到的结果都是 null
难道是生产环境的配置文件没加载?
 
验证我的猜想 。
 
综合以上排查结果得知,生产环境内存泄漏主要由以下问题导致的:
1、用户每次访问页面,都会导致整个Runtime目录被清空
2、缓存不断的被创建,又不断的被删除
3、Opcache缓存了PHP解析文件,但该文件很快就失效了,下一次读取缓存的解析文件时,文件不存在,
导致了 【Program terminated with signal 7, Bus error. in lex_scan】 文件的产生,系统同时生成大量的 core文件
 
解决方法,就这么简单
 
效果还是很好的,回复到正常值了
 

php-fpm内存泄漏问题排查的更多相关文章

  1. Java内存泄漏的排查总结

    Java内存泄漏的排查总结 https://blog.csdn.net/fishinhouse/article/details/80781673(缺图见下一条)内存泄漏的解决方案(转载)https:/ ...

  2. 一次完整的JVM堆外内存泄漏故障排查记录

    前言 记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助. 在整个排查过程中,我也走了不少弯路,但是在文章中我 ...

  3. 一次 Java 内存泄漏的排查

    由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了. 不知道是公司网络 ...

  4. 一个java内存泄漏的排查案例

    这是个比较典型的java内存使用问题,定位过程也比较直接,但对新人还是有点参考价值的,所以就纪录了一下. 下面介绍一下在不了解系统代码的情况下,如何一步步分析和定位到具体代码的排查过程 (以便新人参考 ...

  5. Chrome JS内存泄漏排查方法(Chrome Profiles)

     原文网址:http://blog.csdn.net/kaitiren/article/details/19974269 JS内存泄漏排查方法(Chrome Profiles)   Google Ch ...

  6. JS内存泄漏排查方法——Chrome Profiles

    一.概述 Google Chrome浏览器提供了非常强大的JS调试工具,Heap Profiling便是其中一个.Heap Profiling可以记录当前的堆内存(heap)快照,并生成对象的描述文件 ...

  7. JS内存泄漏排查方法-Chrome Profiles

    原文链接:http://caibaojian.com/chrome-profiles.html 一.概述 Google Chrome浏览器提供了非常强大的JS调试工具,Heap Profiling便是 ...

  8. [转]JS内存泄漏排查方法(Chrome Profiles)

    Google Chrome浏览器提供了非常强大的JS调试工具,Heap Profiling便是其中一个.Heap Profiling可以记录当前的堆内存(heap)快照,并生成对象的描述文件,该描述文 ...

  9. Netty堆外内存泄漏排查,这一篇全讲清楚了

    上篇文章介绍了Netty内存模型原理,由于Netty在使用不当会导致堆外内存泄漏,网上关于这方面的资料比较少,所以写下这篇文章,专门介绍排查Netty堆外内存相关的知识点,诊断工具,以及排查思路提供参 ...

随机推荐

  1. SpringBoot 单文件和多文件上传

    单.多文件上传:单文件上传使用upload.html ,多文件上传使用uploads.html 创建一个Springboot application, POM 中加入 spring-boot-star ...

  2. C#程序模拟登录批量获取各种邮件内容信息

    一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个app有一个活动,通过邮箱注册账号激活可以领5元红包,而恰恰你手上又有一批邮箱可用,那么批量获取邮箱中的激活链接去激活则是 ...

  3. 调用百度API写了一个js翻译小工具

    目前还未完成的功能有:textarea高度自适应,移动端与pc端都写了.效果如图: html: <!DOCTYPE html> <html lang="en"&g ...

  4. Java字符串的替换(replace()、replaceFirst()和replaceAll())

    在 Java 中,String 类提供了 3 种字符串替换方法,分别是 replace().replaceFirst() 和 replaceAll(),本文将详细介绍它们的使用方法. replace( ...

  5. C++入门经典-例3.16-使用do-while循环进行计算

    1:代码如下: // 3.16.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...

  6. project2016安装与破解

      分步阅读 project2016发布增加了许多功能.Microsoft Office 2016 官方正式版发布!这是微软发布的全新办公软件套件,相比现有Office 2013的变化也不是很大,界面 ...

  7. 开源EDR(OSSEC)基础篇- 02 -部署环境与安装方式

    https://yq.aliyun.com/articles/683077?spm=a2c4e.11163080.searchblog.9.753c2ec1lRj02l

  8. django写原生sql语句

    执行自定义SQL语言: from django.db import connection ​ cursor=connection.cursor() ​ # 插入操作 cursor.execute(&q ...

  9. CentOS mysql安装

    MySQL For Excel 1.3.5MySQL for Visual Studio 1.2.5MySQL Fabric 1.5.6 & MySQL Utilities 1.5.6Conn ...

  10. Python日期存入elasticsearch的坑

    今天在消费kafka数据到elasticsearch(以下简称es)中的时候遇到一个问题,也是一个坑,折腾了半天,后来发现得来全不费工夫,全是白忙活啊!!! 问题如下: kafka数据中有一个字段是时 ...