Laravel工作程序在K8s吊舱内运行时失败,错误代码为139,SIGSEGV



我们使用k8s部署作为大型队列工作者。运行时为alpine 3.10和php 7.3 fpm以及laravel 5.6。我们的资源限制是请求:512MB,限制为1Gi。

我们正在运行8个副本来卸载来自SQS的传入消息,我们正在使用。通过kubernetes cron作业发送到队列的消息

php /var/www/artisan queue:work ${CHANNEL} -vvv --tries=3 --sleep=3 --timeout=3600 --memory=${MEMORY}

其中CHANNEL是队列名称(SQS(,MEMORY是传递给laravel工作程序的内存限制。平均而言,每个pod总是处理170+条消息,这些消息与各种第三方api和其他东西进行通信。

问题:

我们的吊舱间歇性地重新启动,出现错误代码139,

SIGSEGV,分段错误。

这正在影响我们的生产系统,因为我们的pod在处理消息时重新启动。

这是一个社区wiki答案,因为它只从docker容器端解决问题。请随意对此进行扩展。

您看到的错误代码表明容器收到SIGSEGV:

SIGSEGV表示分段错误。当程序尝试访问不允许访问的存储器位置,或者试图以不允许的方式访问存储器位置。从Docker容器的角度来看,这要么表明存在问题与应用程序代码有关,或者有时与基础图像有关由容器使用。

在这种情况下,您应该确保没有使用一些旧的Docker版本,然后尝试使用调试器在容器内测试代码。我对这个主题不够熟悉,无法进一步指导您,但这个SO问题可能对您有用。

最新更新