php cli模式下,部分程序不会停止

查看:182
本文介绍了php cli模式下,部分程序不会停止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

  • 用php cli模式获取数据,数据能正常获取,使用htop查看,有几个获取的php程序一直存在,使用ps查看,发现有些一直存在了很多天,内存不释放,导致运行一段时间后,内存溢出,服务器崩溃

  • 实际运行时间不超过半小时,但这个php已经超过3小时了,并且不会自动释放

  • php代码没死循环,没发现什么问题,并且只是偶尔才不会释放,大部分还是会主动释放,查不出什么问题

  • 怀疑curl获取数据,如果catch到错误,cli不会停止,就呆在那?

  • php代码设置了最大运行时间,但是无效,还是会一直存在!

解决办法:

  • 一楼提供了一种新的思路,但在那之前就找到了原因,我发现,失败的获取,都会一直存在,而且新的api没使用sdk都不会有问题,排查对比,发现sdk的curl没有设置CURLOPT_TIMEOUT时间,sdk里面加上curl_setopt($connection, CURLOPT_TIMEOUT, 30),就不会有一直存在的php进程。

  • 结论:使用cli模式,如果有curl,没设置超时时间,就会一直存在于内存,如果多的话,就会内存溢出,服务器崩溃。

  • 虽然没用到一楼的办法,但是采纳一楼的答案吧。

解决方案

可以使用register_shutdown_function方法观察并捕获程序最后的状态。

注册一个方法,当一个请求request执行完毕时,调用这个注册的方法。注意,哪怕在执行过程中发生error导致本次请求被强制退出,注册的方法也会执行。

详细使用方法参考:http://www.bo56.com/%E4%B8%80%E6%AC%A1php%E8%BF%9B%E7%A8%8B%E8%AF%A1%E5%BC%82%E9%80%80%E5%87%BA%E7%9A%84%E6%8E%92%E6%9F%A5%E8%BF%87%E7%A8%8B/

这篇关于php cli模式下,部分程序不会停止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆