生产环境内存泄漏问题排查,以下是排查思路
 
生产环境上有严重的内存溢出问题(红色框所示,正常值应为是 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. microsoft office 2010 visio激活

    office2010 tookit这款绿色的软件进行Visio2010激活 http://jingyan.baidu.com/article/4f34706ecae169e387b56dd1.html

  2. 分布式-信息方式-ActiveMQ的静态网络连接

                           ActiveMQ的静态网络连接 在一台服务器上启动多个Broker步骤如下:1:把整个conf文件夹复制一份,比如叫做conf22:修改里面的 activ ...

  3. eclipse中设置tab为4个空格

    1.insert space for tabs前打勾 2.General settings中选择Spaces only 3.搞定

  4. webDriver各版本对应

    chromeDriver http://npm.taobao.org/mirrors/chromedriver/ http://chromedriver.storage.googleapis.com/ ...

  5. Android动画View Animation与Drawable Animation

    Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等, ...

  6. Selenium 2自动化测试实战5(模块调用)

    一.模块调用 1.创建一个目录project,并且在目录下面创建两个文件 project/ 一 pub.py L一 count.py 在pub.py文件中创建add函数. #pub.py def ad ...

  7. Linux监控命令之==>strace

    一.命令介绍 strace 常用来跟踪进程执行时的系统调用和所接收的信号.在Linux 世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式 ...

  8. nginx查看并发数量

    cat >> /etc/nginx/conf.d/status.conf << EOF server{ listen ; server_name www.test2.com; ...

  9. java课堂疑问解答与思考2

    问题一 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 答:Xn+1=(7^5*Xn)mod(2^31-1) 程序源码: import java.util.Random; imp ...

  10. nginx优化方案

    一.nginx 配置文件中对优化比较有作用的为以下几项:1. worker_processes  8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8). ...