php守护进程占用内存很高,如何排查问题出在哪?

发布于 2022-09-07 07:39:44 字数 201 浏览 22 评论 0

问题描述

用PHP程序写了一个守护进程,占用内存特别高(%MEM:80%),且不释放。

我只能定位到这个进程的PID,但是我无法定位到是程序的哪块代码引起的,如何才能查到问题出在哪呢?

前提条件不变:
- 即用PHP程序运行的守护进程。
- 我已在程序中手动释放了内存。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千鲤 2022-09-14 07:39:44

如果不嫌麻烦的话,可以试试我的php-stacktrace,不需扩展,不需要重启进程,只要一个PID,就可以读取PHP进程的内存,解析出调用堆栈信息,从而知道PHP进程在干啥了。

间隔几十ms调用一次,把结果保存起来,就是个采样profiler:)

看错题目,原来是内存问题,可以直接生用gdb dump内存然后慢慢查。

放我走吧 2022-09-14 07:39:44

代码块不多的话,多用 memory_get_usage 打印当前内存占用。
php守护进程一般都会出现泄漏问题,很多情况下是扩展导致的。
所以生产环境建议每执行一条任务,计数器+1,当超过一定量,比如100,退出进程,保证业务逻辑完整执行(自己退出就会完整执行,被系统干掉就可能没执行完)
然后使用nodejs的pm2进程保活

pm2配置文件例子:

{
  "name": "显示名称",
  "script": "cli.php",
  "exec_interpreter": "php",
  "exec_mode": "fork",
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文