我在symfony(3.4)项目上使用betalkd有问题。
我有一个用于分析信息的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 有超时连接到数据库?与池连接符号有关吗?
在项目中,我们使用 doctrine dbal 向数据库发出请求。
异常消息:
111:29:01 错误 [控制台] 运行命令"分析器"时引发错误。消息:"执行'从 XXX 中选择 XXX:
ORA-03113:通信通道上的文件结尾 ID de processus : 20624 ID de session : 154, Numéro de série : 6639">
谢谢
PHP并不是特别适合长时间运行的进程。我已经通过 Beanstalkd 运行了数千万个作业,通过其他队列系统运行了数亿个作业,并且通常会运行循环一定次数的迭代(从 5 或 10 到几百或更多),然后退出脚本以使其清理,然后重新启动。
你可以让任何启动脚本的东西也安排重新启动它,init
、upstart
、supervisord
或从类似的东西开始的 shell 脚本。
我倾向于使用 shell 脚本,因为这样我就可以从脚本中返回一个特定的值,该值由 bash 脚本检查,然后可以对其进行操作。 对于一个值,我可以立即重新启动(按计划),或暂停片刻,或者如果它是另一个值,则可能是计划外退出,这将暂停几秒钟并记录问题。