我在symfony(3.4)项目中遇到beanstalkd问题。
我有一个用于分析信息的symfony命令,分析器在一段时间内保持命令运行24/7。
$pheanstalk = new Pheanstalk('127.0.0.1');
while (true) {
$pheanstalk->watch($worker);
$queue = $pheanstalk->statsTube($worker);
if ($queue['current-jobs-ready'] > 0) {
analyseInformations();
else {
//get the most charged worker...
}
在X分钟,5,10或15之后,命令返回异常的问题:ORA-03135 Connection Lost
dba说问题来自symfony项目而不是oracle数据库,我错过了beanstalkd连接的任何内容?
Beanstalkd与数据库有超时连接?与池连接symfony有什么关系?
在项目中,我们使用doctrine dbal向数据库发出请求。
异常消息:
111:29:01 ERROR [console]运行命令“analyzer”时抛出错误。消息:“执行'SELECT XXX FROM XXX:
时发生异常ORA-03113:通信频道上的文件结束 ID de processus:20624 会议记录:154,Numérodesérie:6639“
谢谢
答案 0 :(得分:1)
PHP并不特别适合长时间运行的流程。我通过Beanstalkd运行了数千万个作业,通过其他排队系统运行了数亿个,并且通常会循环运行一些迭代次数(从5或10到几百或更多),然后退出脚本让它清理,然后重新启动。
你可以通过脚本安排重启,init
,upstart
,supervisord
或从类似的东西启动的shell脚本。
我倾向于选择shell脚本,因为我可以从脚本返回一个特定的值,由bash脚本检查,然后可以对其进行操作。对于一个值,我可以立即重新启动(按计划),或者暂停片刻,或者如果它是另一个值,则可能是计划外退出,这将暂停几秒钟并记录问题。 / p>