Сбой рабочего Laravel при запуске внутри модуля K8s с кодом ошибки 139, SIGSEGV

Мы используем развертывание k8s в качестве рабочего очереди laravel. Среда выполнения - alpine 3.10 и php 7.3 fpm с laravel 5.6. Наши ограничения на ресурсы - это запросы: 512 Мбайт и лимиты 1Ги.

мы запускаем 8 реплик для разгрузки входящих сообщений из SQS, и мы используем. сообщения в очередь отправляются через задания cron kubernetes

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

где CHANNEL - это имя очереди (SQS), а MEMORY - это ограничение памяти, переданное рабочему laravel. в среднем каждый модуль всегда обрабатывает более 170 сообщений, которые взаимодействуют с различными сторонними API и прочим.

проблема:

периодически наши поды перезагружаются с кодом ошибки 139,

SIGSEGV, Ошибка сегментации.

Это влияет на наши производственные системы, так как наши модули перезапускаются, пока есть сообщение.


person Ankit Bhardwaj    schedule 20.07.2020    source источник


Ответы (1)


Это ответ сообщества вики, поскольку он решает проблему только со стороны контейнера докеров. Не стесняйтесь расширять это, как хотите.

Код ошибки, который вы видите, указывает на то, что контейнер получил SIGSEGV:

SIGSEGV указывает на ошибку сегментации. Это происходит, когда программа пытается получить доступ к области памяти, доступ к которой ей не разрешен, или пытается получить доступ к области памяти запрещенным способом. С точки зрения контейнера Docker, это либо указывает на проблему с кодом приложения, либо иногда на проблему с базовыми образами, используемыми контейнером.

В этом случае вам следует убедиться, что вы не используете некоторые старые версии Docker, а затем попробовать протестировать свой код внутри контейнера с помощью отладчика. Я недостаточно знаком с этой темой, чтобы вести вас дальше, но этот вопрос SO может быть вам полезен.

person Community    schedule 21.07.2020