• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP内存泄漏详解

php 搞代码 4年前 (2022-01-22) 21次浏览 已收录 0个评论

内存泄漏指的是在程序运行过程中申请了内存,但是在使用完成后没有及时释放的现象, 对于普通运行时间较短的程序来说可能问题不会那么明显,但是对于长时间运行的程序, 比如Web服务器,后台进程等就比较明显了,随着系统运行占用的内存会持续上升, 可能会因为占用内存过高而崩溃,或被系统杀掉(OOM)。

  1. nginx服务器fork出n个子进程(worker),php-fpm管理器fork出n个子进程。

  2. 当有用户请求,nginx的一个worker接收请求,并将请求抛到socket中。

  3. php-fpm空闲的子进程监听到socket中有请求,接收并处理请求。

这里要重点说一下第三步骤。第三步涉及到php-fpm进程生命周期的东西。一个php-fpm的生命周期大致是这样的:模块初始化(MINIT)-> 模块激活(RINIT)-> 请求处理 -> 模块停用(RSHUTDOWN) -> 模块激活(RINIT)-> 请求处理 -> 模块停用(RSHUTDOWN)……. 模块激活(RINIT)-> 请求处理 -> 模块停用(RSHUTDOWN)-> 模块关闭(MSHUTDOWN)。在一个php-fpm进程的生命周期里,会有多次的模块激活(RINIT)-> 请求处理

+本文来源gao!%daima.com搞$代*!码9网(

搞gaodaima代码-> 模块停用(RSHUTDOWN)的过程。这个“请求处理”的大致过程是这样的:php读取相应的php文件,对其进行词法分析,生成opcode,zend虚拟机执行opcode。

PHP配置文件里面的memory_limit 这个东西,其实,它限制的只是这个“请求处理”的内存。所以,这个参数跟php-fpm进程占用的内存并没有什么关系。

那么,有什么办法能阻止这个问题呢?
php-fpm.conf中有个参数pm.max_requests,等同于PHP_FCGI_MAX_REQUESTS。该值的意思是一个fpm进程处理多少个请求后自动杀掉另起新进程。

内存泄漏的debug及工具

内存泄漏的程序通常很容易发现,因为症状都表现为内存占用的持续增长, 在发现内存持续增长后我们需要判断是什么导致了内存泄漏,这时往往需要 借助一些工具来帮助追查,我们可以用到两个工具:PHP内置内存泄漏探测 及valgrind内存泄漏分析。

相关推荐:

JavaScript内存泄漏的处理方式实例分享

PHP内核-内存泄漏与新垃圾回收机制的图文介绍

什么是内存泄漏以及内存泄漏发生的原因和防止办法

以上就是PHP内存泄漏详解的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP内存泄漏详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址