Closed noellabo closed 1 year ago
misskey.cloud、のえすきーとも発生しています。
おそらくMisskey 13.13.0に更新して以降です。
定期再起動をかけて運用していたところ、13.13.0以降、利用者より再起動時にエラーが長く続くという報告があり、確認したところ、ポートを開いたままなかなかプロセスが終了しておらず、毎回、終了に1分+起動後のアクセス受付までのあいだ、ユーザーにエラーを返す時間が生じていました。
Misskey 13.12.x までは終了は即座に終わっていたと思います。
うちも似たような現象が起きてたので報告 13.12.3 → 13.13.1 → 13.13.2 とマイグレートしてきたんだけど、13.13 では pnpm migrate systemctl restart misskey とすると起動しなくなる(なんかエラーはいてる)
どうもredis に繋がらないようで、 redis-serverを再起動すると起動プロセスが進みはじめるっぽい
tasukete
https://github.com/fastify/fastify/issues/2571 https://github.com/fastify/fastify/issues/260 Fastify は 通常の終了シグナルで終了しないので、Pluginを入れる必要がある
究極的にはシャットダウンフックをしないを推すわ https://github.com/misskey-dev/misskey/blob/0e6cd577cc1e880f53492c3cb8b15f273e412897/packages/backend/src/boot/common.ts#L20
:
なぜ終わらないのか → ServerService.dispose() の Fastify 周りが終わらないから。(特にWebSocket繋がってると終わらない)
どうすれば終わるようになるのか → そこでawaitしないようにしたり、Fastifyがシグナルで閉じるようにしたりすると終わるようになる。 → でも、それ結局強制切断だから、今までのプロセスごと終了させられるのとあんまり変わらなくないかしら? → 別にServerServiceのシャットダウンフックいらないのでは?
てゆうか他のシャットダウンフックもいらなくない? これから終了するプロセスのメモリキャッシュをクリアしたりハンドラを消したりするのリソースの無駄じゃないかしら?
なぜ、プロセスが再forkされ続けるのか? → プロセスが終了したら理由を問わず再forkするようになってるから。 → プロセスの終了方法とかシャットダウン状態見るとかもあるけどなんかややこしいし、ちょっと挙動変わる。 → なお、シャットダウンフックが終わらない問題が解決すれば、メインプロセスもすぐ終わって、再forkするプロセスがいなくなるので事象は起きなくなる。
一部メモリにデータを溜めておいて定期的にDBに書き込む処理があってシャットダウンされる時も書き込むようにしてるからシャットダウンフック使わないと困る場合があるかも
まあそこまで重要なデータじゃないから失われてもそこまで問題にならないけど
一部メモリにデータを溜めておいて定期的にDBに書き込む処理があってシャットダウンされる時も書き込むようにしてるからシャットダウンフック使わないと困る場合があるかも
チャートかしら https://github.com/misskey-dev/misskey/issues/8967
保存間隔短くして書ききれないのはあきらめるとか・・・
RedisとかDBのコネクションって明示的に切断してやらないと相手側に残ったりしないのかしら?
RedisとかDBのコネクションって明示的に切断してやらないと相手側に残ったりしないのかしら?
流石にプロセス終了→TCP接続終了→subscriber解除 なんじゃないかしら
なるほど
あーでもあれだ Nestインスタンスはテスト中に何回も作成されたり廃棄されたりするからシャットダウン=プロセス終了とは限らない
ちなみにioでは https://github.com/MisskeyIO/misskey/pull/156 と https://github.com/MisskeyIO/misskey/pull/159 で一応終了されないという問題は解消しています
Nestインスタンスはテスト中に何回も作成されたり廃棄されたりするからシャットダウン=プロセス終了とは限らない
テスト環境だけHookするとか?
本番環境とかはズバッと終了してほしい気はするのだわ。(さっさと開放して復帰して欲しい)
ズバッと終了期待
本番環境はズバッと終了させるか
💡 Summary
Misskeyのバックエンドプロセスが終了しない、あるいは非常に時間がかかる
🥰 Expected Behavior
終了を指示したら、すぐにポートを閉じ、速やかに正常終了する
🤬 Actual Behavior
終了を指示しても、ポートが開いたままで内部エラーだけ繰り返し、終了しない(最終的に強制終了される)
📝 Steps to Reproduce
sudo systemctl stop misskey
🛰 Backend (for server admin)
問題の発生はMisskey 13.13.0に更新して以降だと思われますが、Misskey以外の更新によるものである可能性もあり検証できていません。
ログ