grpc ruby:プロセスをフォークした後GCが走るとSEGVする
というIssueがある
すでに修正済みなので最新バージョン(執筆時点で1.64.0)を使っていればOKのはず
経緯
Vertex AIを用いたレコメンドエンジンを作っており、そのレコメンドエンジンに複数リクエストを投げていて遅かった
parallel gemを用いてプロセスで並行処理するようにした
当時はレスポンスタイムを急いで改善しなければならず、スレッドセーフな処理なのか確信が持てなかったのでプロセスにした
このコードのままRuby 3.3に上げたところ、Segmentation faultが顕在化してしまった
メモリダンプなどのログ出力によってKubernetesのephemeral storageを大量に消費、それによるeviction(podの終了)が頻発した結果、サービス障害になった
上のIssueが原因だとするとRuby 3.2でも起こるはずなので、Ruby 3.3が直接の原因というよりは、3.3の変更点の何かが噛み合ってサービス障害につながってしまったと思われる
ログによると [BUG] system stack overflow during GC. Faulty native extension?となっており、C拡張を疑った
バックトレースを読むとgrpcが使われていることがわかり、調べたところ上のIssueを見つけた
エラーメッセージは異なるが状況は似ているため、プロセスによる並行処理をやめてスレッドにした
問題なく動いてるのでRuby 3.3再チャレンジしようとしている