生产环境内存泄漏问题排查,以下是排查思路
 
生产环境上有严重的内存溢出问题(红色框所示,正常值应为是 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. 揭开HTTPS的神秘面纱

    摘自:https://www.cnblogs.com/hujingnb/p/11789728.html 揭开HTTPS的神秘面纱   在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了 ...

  2. 数据加密之AES

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. 第八周学习总结&实验报告(6)

    实验六 异常 一.实验目的: (1)理解异常的基本概念: (2)掌握异常处理方法及熟悉常见异常的捕获方法. 二.实验要求: (1)练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使 ...

  4. 通过daemon.json配置docker 2375 API端口,配置私有http仓库

    编辑daemon.json vi /etc/docker/daemon.json 配置如下内容即可 { "hosts":[ "tcp://0.0.0.0:2375&quo ...

  5. 全面解读php-运算符

    一.运算符的优先级 二.短路作用 本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/p/11074776.html

  6. 整理ing

    RT 要学习的 专克bzoj权限题 钟神p系列

  7. 如何在form组件中添加一个单选或者多选的字段

    解决办法: 需要在增加的类里面加入choices   具体操作如下:

  8. 学习笔记 - Git

    学习参考网址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 Git是目前世界上 ...

  9. Linux_用户和权限管理

    目录 目录 用户管理基础知识 用户管理指令 useradd userdel passwd usermod chage su id who chmod chown s权限t权限 acl 用户管理基础知识 ...

  10. 解决 /usr/lib/x86_64-linux-gnu/liblapack.so.3: undefined reference to `gotoblas'

    最近需要用到openblas库,本地ubuntu 系统内有一个版本,但是想用自己新编译的openblas, 使用cmake指定了链接的库地址, SET(LINK_LIB_DIRS "/usr ...