首页 > 其他 > 详细

生产环境内存泄漏问题排查

时间:2019-08-05 12:00:29      阅读:390      评论:0      收藏:0      [点我收藏+]
生产环境内存泄漏问题排查,以下是排查思路
 
技术分享图片
生产环境上有严重的内存溢出问题(红色框所示,正常值应为是 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 文件中
 
技术分享图片

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

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

生产环境内存泄漏问题排查

原文:https://www.cnblogs.com/funsion/p/11301847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!