ブログを運営し始めてから、時折サーバーがハングする症状がありました。「なんでやろなー」とは思っていたものの、AWSの一番小さなサーバーなもんですから、まま仕方ないかなあ、でも、少しアクセスが伸びてきてるから、対策はしないとなあ、ということで、少し前ですが調査を開始。
ログを確認すると、メモリが溢れて、httpd
が強制終了してしまうことがわかったので、メモリが少ないのを補うために、スペックを増やしてお金をつぎ込むというは最終手段として、スワップ領域を作成して、仮想メモリ対策を施していました。
その対策の様子はこちらです。
それからというものの、ほぼ毎日ログをチェックしていたのですが、メモリが溢れることも少なくなり、良かったなあと一安心していたものの、やっぱり「何かの拍子」でサーバーがクソ重たくなるのでした。
もう一段サーバースペックを上げたらえーやんか。となるのかもですが、この物価高騰時代が突入した時に食料じゃなくて、なんでサーバーなんじゃごらああ!!と妻氏にオコされないよう、なんとか原因を探ってみようと、Wordpressの何が重たいのか要チェックの日々になりました。
当初は、あてずっぽうですが、記事更新時が怪しいなあと感じていて、サーバープロセスを監視しながら操作を行っていたのですが、どうやら違う。
じゃあどこなのか?とくにサイトにアクセスされていても常に平常運転をしているものですから、一つ一つの行動を辿っていってみました。すると...記事を更新した後に、イレギュラーですが、ツイッターに記事を投稿するのですが、その時に、グーーーーンと重たくなることに気づいたのであります。
それで、top
コマンドで監視しながら、再度、ツイッターに投稿すると、またグーーーーン。ログみるとメモリ溢れてるやーん。なんやこれーとなった様子が以下です。
ツイッターにツイートした後にサーバーのロードアベレージが50を超える
画像を見てもらって赤枠がロードアベレージという、簡単にいうとコンピュータの負荷、プロセスの待ち受け数値ですが、高い数字になっていて、プロセスが httpd
一色になるぐらいになっています。がびーん
で、ようやく原因はわかったのですが、ツイートして「なんでhttpdプロセスがこんなになんの?なにされてんの?」という疑問が沸き上がるわけであります。
いつもブログへの誘導もかねて、ブログリンクを貼り付けてツイートすることが多いのですが、まさにブログリンクを貼り付けてツイートが原因のようでした。
アクセスログをリアルタイムで監視しながら、ブログリンクを貼り付けて投稿すると、なんと!!「Twitterbot/1.0」というツイッターボットがサーバーをキルしにやってくるのです!ばばんっ!
ツイッターにリンクを貼り付けて投稿するとTwitterbot/1.0がサーバーにやってくる!
ということで、実はツイッターボットは何をしているのか?ということなんですが、調べてみると、どうやらリンクをたどってボットが対象サイトのコンテンツをクロールしているのか結果として「ツイッターカード」を作成するようです。
ツイッターカードが作成された状態。自サーバーをキルされる代わりの報酬。
ちなみに、検証を兼ねて、ツイッターボットをブロックした状態でサイトリンクを貼り付けてツイートした結果、以下のようになりました。
ツイッターボットをブロックし、ブログリンクを貼った状態だと、ツイッターカードは作成されない。
それと、ツイッターボットをブロックした状態と、そうでない状態でプロセスをリアルタイム監視してみると、画像を上げる程でもないほど、プロセスは平常運転をしていました。正にこれが原因でした。
「なんか、時折サーバーが500エラーだしてんだよね・・」とお悩みの方は、一度ツイッター関連を疑ってみるのもありかなと思います。
以下、ツイッターボットをブロックする方法です。
ツイッターボットをブロックする方法
ツイッターボットをブロックする方法はいくつか考えられるのですが、自分は .htaccess
にて、設定することにしました。
■ .htaccess
# block bot SetEnvIf User-Agent "Twitterbot/1.0" denybot <RequireAll> Require all Granted Require not env denybot </RequireAll>
いくつかブロックしているしょーもないボットもあるのですが、今回はツイッターボットが議題なので、それだけ記述しておきます。
ただ、気になることは、ツイッターボットは信頼性のあるボットでもある(知名度的に)なので、あからさまにツイッターボットをブロックしてしまうと、SEO的にもあまりよろしくないのかも?
例えば、グーグルボットをブロックしているような...?(考えすぎかな...しらんけど)
サーバーのスペックに自信のある方は、もしくは同じような形で運営しているサービスのリンクなんかは貼り付けた状態でツイートしてみて「全然へいき」なのであれば、ブロックしない方がいいと思ってます。(根拠はないけど)
自分の場合は、ツイートにツイートカードがある方がツイート映えがいいのはわかりきっているので、大分トレードオフですが、サーバーが落ちることを考えると、ケースバイケースで運営していこうかなあと考えています。