为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2019-05-20 17:48:56
问题描述用PHP程序写了一个守护进程,占用内存特别高(%MEM:80%),且不释放。我只能定位到这个进程的PID,但是我无法定位到是程序的哪块代码引起的,如何才能查到问题出在哪呢?前提条件不变:-即用PHP程序运行的守护进程。-我已在程序中手动释放了内存。
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

如果不嫌麻烦的话,可以试试我的php-stacktrace,不需扩展,不需要重启进程,只要一个PID,就可以读取PHP进程的内存,解析出调用堆栈信息,从而知道PHP进程在干啥了。
间隔几十ms调用一次,把结果保存起来,就是个采样profiler:)
看错题目,原来是内存问题,可以直接生用gdbdump内存然后慢慢查。
                            
查看完整回答
反对 回复 2019-05-20
?
呼如林

TA贡献1798条经验 获得超3个赞

代码块不多的话,多用memory_get_usage打印当前内存占用。php守护进程一般都会出现泄漏问题,很多情况下是扩展导致的。所以生产环境建议每执行一条任务,计数器+1,当超过一定量,比如100,退出进程,保证业务逻辑完整执行(自己退出就会完整执行,被系统干掉就可能没执行完)然后使用nodejs的pm2进程保活
pm2配置文件例子:
{
"name":"显示名称",
"script":"cli.php",
"exec_interpreter":"php",
"exec_mode":"fork",
                            
查看完整回答
反对 回复 2019-05-20
  • 2 回答
  • 0 关注
  • 992 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信