情况
项目上有一些 php 进程需要定时扫数据库,比如每秒查询一次
现在遇到个问题,发现有些进程有时候"假死",进程还在,但是观察日志是没有继续运行了
初步判断是常驻进程和 mysql 的连接断了,比如服务器和 db 服务器网络波动等造成的
一般我们 php 查询数据库会在 new model 的时候新建连接(或是从 php-fpm 管理的连接池里获取),但是常驻进程持续持有这个连接,所以在这种断开情况下不会重新建立新的连接
想问下:
1 php 检测连接状态有什么好的方案,现在知道的是 ping 或者 pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS)
2 这种情况下一般如何处理 在检测后重新 new 一个?疑惑是改成不持有,每次检测前重新 new
为什么不用 crontab:
怕进程运行时间过久,crontab 不能保持单进程运行,怕一时没执行完,每秒启一个进程"雪崩"