0
0

AWS ECSにデプロイしたRailsが、特定のページでシャットダウンした際の対応まとめ。mini_racerのセグメンテーション違反

Posted at

先に結論

JSランタイムのGemのmini_racerが何故かAWS ECS(Fargate)の環境下でセグメンテーション違反を起こし、Rails全体をクラッシュさせていた。
mini_racerを使わずに、nodejsを使うことで回避した。

症状

  • 特定のページでいきなりPumaが落ちる
  • AWSのECS環境でのみ落ちて、ローカルだと再現しない
    • Fargate(Dockerコンテナ)を利用

ログ

ログの最新はこのような記載…何が原因かもよくわからずにいきなりpumaが落ちていることが分かる。

2024-06-03T08:14:48.983Z	7fbb3194d000-7fbb3194e000 r--p 00029000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2024-06-03T08:14:48.983Z	7fbb3194e000-7fbb3194f000 rw-p 0002a000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2024-06-03T08:14:48.983Z	7fbb3194f000-7fbb31950000 rw-p 00000000 00:00 0
2024-06-03T08:14:48.983Z	7fff19abe000-7fff1a4bd000 rw-p 00000000 00:00 0 [stack]
2024-06-03T08:14:48.983Z	7fff1a55e000-7fff1a562000 r--p 00000000 00:00 0 [vvar]
2024-06-03T08:14:48.983Z	7fff1a562000-7fff1a564000 r-xp 00000000 00:00 0 [vdso]
2024-06-03T08:14:48.983Z	ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
2024-06-03T08:14:49.857Z	bin/start_server.sh: line 24: 38 Aborted (core dumped) RAILS_ENV=${RAILS_ENV} bundle exec pumactl -F config/puma.rb start

エラーログを相当遡ると遡ると、mini_racerのセグメンテーション違反で落ちていることが分かる。

2024-06-03T08:14:48.776Z	/usr/local/bundle/gems/mini_racer-0.12.0/lib/mini_racer.rb:228: [BUG] Segmentation fault at 0x00007fbb2c828008
2024-06-03T08:14:48.776Z	ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [x86_64-linux]
2024-06-03T08:14:48.776Z	-- Control frame information -----------------------------------------------
2024-06-03T08:14:48.776Z	c:0146 p:---- s:0924 e:000923 CFUNC :eval_unsafe
2024-06-03T08:14:48.776Z	c:0145 p:0010 s:0918 e:000917 BLOCK /usr/local/bundle/gems/mini_racer-0.12.0/lib/mini_racer.rb:228
2024-06-03T08:14:48.776Z	c:0144 p:0010 s:0915 e:000914 METHOD /usr/local/bundle/gems/mini_racer-0.12.0/lib/mini_racer.rb:348

なるほど、なにかしらのJSが動くページで落ちていた様子。

対応

mini_racerの使用を取りやめ、nodejsをランタイムとして利用。
ExecJSが勝手にnodejsを認識してくれるため、特に設定変更せずに載せ替えが可能。

具体的には…

  • Gemfileからmini_racerを削除
  • Dockerコンテナ生成時に処理される、DockerFileでnodejsをインストールするコマンドを追記
RUN apt-get install -y nodejs

をして、再度コンテナを上げ直したら問題なく起動した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0