[概要]
着々とinodesの値が増え始め、サーバーの応答が遅くなる事象が発生しました。
結論から書くと、GoogleBotの巡回がある日から多くなり、GoogleBotによるアクセスを捌ききれなくなりました。
GoogleBotが実行に時間のかかるスクリプトにアクセスした場合に、404を返すようにしました。
※500や429が適切のような気もするのですが、200をかえせるようになる見込みがないので、あらかじめそのスクリプトはなかったことにして、様子見いたします。
[詳細]
一週間前からinodeの使用量が着々と増え始めました。
時期がちょっとだけ違うのですが、得点とゲームの対応表(グラフィカル版)をリリースしたので、GoogleBotがそこにアクセスしてキャッシュファイルを生成しているからかな…と思っていました。
しかし、だんだん負荷が増えて、ついにサーバーの応答が遅くなるまでになってしましいました。得点とゲームの対応表(グラフィカル版)へのアクセスだけでは、こんなに負荷があがるはずがないので、ソフト不良を疑い、各サーバーを再起動するも負荷は高いままでした。
iftopコマンドの出力を眺めていても、Dos的なものだったり、頻度が多いクローラーがきているわけでもなく、ただGoogleBotが多い気がする…というものでした。
試しにGoogleBotのアクセスを遮断したところ負荷が改善しました。
なぜ、GoogleBotのアクセスが多くなったのかは分からなかったのですが、すぐにGoogleBotのアクセスを減らす必要があったので、Googlebot のクロール頻度の変更を見るも、すぐにクロール頻度を低くする方法はありませんでした。
簡単な解決策としては、robots.txt を使用して、過負荷になっているエージェント(Googlebot、AdsBot など)に対するクロールをブロックします。ただし、有効になるまで最大 1 日程度かかることがあります。
すぐに効果があるのは以下の対応でした。
負荷の増大を動的に検出して対応できる場合は、配信制限に近づいた時点で HTTP 5XX / 429 を返します。ただし、5XX や 429 を返すのは 2~3 日程度までにすべきです。それを超えてしまうと、Google がサイトをクロールする頻度がいずれ少なくなってきます。
そこで、いくつかのスクリプトでGooglebotがきた際に429を返すようにしました。
if(preg_match("/Googlebot/", $_SERVER['HTTP_USER_AGENT'])) { header("HTTP/1.1 429 Too Many Requests"); exit; }
これにより、アクセス数が減りました。

また負荷も下がりました。
なぜGoogleBotのクロール頻度が増えたのかについて、Google Serch Consoleを確認したところ、カバレッジの有効なページの数が突然14万ページ増えていました。
現在、特定のスクリプトで429ではなく404を返すようにしました。
一時的ではなく今後もGooglebotに巡回して欲しくない…と思っているからです。
負荷は下がったので、恒久的な対策として、robor.txtに特定のスクリプトを記載し、そもそもクロールしないように設定をいたします。