Redmine 6.1への移行は無事に終わりました。
Redmine 5.1からのメジャーアップグレードということもあり、今回は不要になったプラグインをかなり整理しています。長年使い続けてきた環境だっただけに、「使っていないものは思い切って切る」という判断をしました。
しかし、Webで公開していると思わぬトラブルが発生しました。
CPUが一向に下がらない
切り替えた Redmine 6.1 を監視していると、Passenger の CPU 使用率が妙な動きをしています。
%CPU %MEM PID USER COMMAND
--------------------------------------------------------------------------------------
78.1 4.7 560493 www-data Passenger RubyApp: /home/www-data/redmine_v6 (prod)
38.4 3.8 560422 www-data Passenger AppPreloader: /home/www-data/redmine_v6
何も触っていないのに 70~90% を行ったり来たりしています。移行直後なので、
- 「まだ何か設定を忘れているのか?」
- 「プラグインを外した影響が残っているのか?」
と考えながら調査を始めました。
まず Passenger を見ようとした
最初に確認したのは Passenger 自身です。普段であれば passenger-status を実行すれば状況はある程度分かります。
ところが今回は、それすら使えませんでした。UNIX ドメインソケットのパス長制限(108バイト)に引っ掛かり、ArgumentError が発生してしまいます。
管理コマンドが使えない以上、地道にログを追うしかありません。そこで production.log と netstat を確認してみることにしました。
最初に見えたもの
production.log を眺めていると、最初に目に入ったのは見覚えのある URL でした。
Knowledgebase。
v5.1→v6.1へ移行で完全に削除したプラグインです。ところが、その URL へ今でもアクセスが来ています。
「検索エンジンが昔の URL を覚えているのか。」
最初はそう考えました。しかし、ログを読み進めていくと、それだけでは説明が付きません。
他にも出てくる動き
アクセスされているのは Knowledgebase だけではありません。
チケット一覧。
しかも普通に開いているわけではなく、
- sort=
- page=
- set_filter=
こういったパラメータ付きの URL が大量に飛んできます。
さらに、
- CSV
- Atom
といったエクスポートまで巡回しています。
ここまで来ると、「404 が増えている」という話ではなくなってきました。クローラーがかなり重い処理を次々と要求しています。その頃、netstat を見ると HTTPS セッションが大量に張り付いたままになっていました。
ここでようやく、一つの可能性が頭に浮かびます。
「もしかして、これ全部クローラーなのでは……?」
「というか、悪質クローラーは止めている(includeでシャットダウンしている)はずでは……?」
そして、もしそうだとしたら、Rails 側で受け止め続けていいのか。
次回はログをさらに追い掛けながら、最終的に Googlebot による旧 URL の巡回と、動的クエリの総当たりが Passenger を疲弊させていた こと、そして Apache の mod_rewrite と 410 Gone を使って水際で止めるまでの経緯を書いていこうと思います。
コメントを残す