我们使用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问题可能对您有用。