Segfault occurs when executing celery worker with librabbitmq1¶
Ubuntu Trustyのpython-celeryパッケージを使って、celery workerを実行すると、プロセスが突然死ぬ、という現象に遭遇しました。 原因は、AMQPクライアントライブラリであるlibrabbitmq1がsegfaultを起こしていたためでした。
[881933.805893] celery[12704]: segfault at 0 ip 00007f23cd79f6ab sp 00007fff5afe3f70 error 4 in librabbitmq.so.1.1.1[7f23cd797000+10000]
celerybeatを使うと、segfaultは起きないものの、RabbitMQにジョブだけたまり、ちっとも処理されない、という現象が発生します。
Sidで開発していたときには発生しなかった問題だったので、比較してみたらSidではlibrabbitmq1とこのライブラリに依存するpython-librabbitmqは使っておらず 1 、python-amqpを使っていました。依存関係としては下図のようになります。
python-amqpもインストールされていたのですが、python-librabbitmqがインストールされているとこちらが優先されるようです。
workaround¶
librabbitmq1とpython-librabbitmq 2 をアンインストールすると、この問題は解決します。ちなみにSidでこれらのパッケージをインストールしてみましたが再現しなかったのでTrusty(のパッケージのバージョン)だけでの問題のようです。
Footnotes