大変ありがたいことに、たまにこのブログのURL付きでツイートしてくださる方がいる。
このブログのURLでツイート検索していつも拡散されていないかワクワクしながらみている。
昔書いた記事なんてどんな内容だったか忘れているものが多いので、だいたいそのリンクをクリックして、書いたことを確認をする。
だけれども、ここ最近いつもアクセスできなくなる。
タイムアウトになって表示されない。
仕方ないのでTwitter経由でなく、直接ブログを見に来るが入れない。
アナリティクスのリアルタイム集計を見るとどんどんいまアクセスしている人が減っていく。
なんなんだ。
もうスペック的にヤバイのか?(一番安いVPSの一番安いプランをギリギリのチューニングでやっている)
真相を確かめるため、プロセス数とアクセスログを表示させながらTwitterのリンクをクリックすることにした。
謎のプロセス増加
ps alx | grep httpd | wc -l というコマンドで、apacheのプロセス数を調べる。apacheはアクセスごとにプロセスが作られるのだ。
数人がアクセスしている状態では14件あった。
ツイートに貼り付けられているリンクをクリックしてみると、14件から37件に急増!
少ないリソースでやっているので、メモリの上限を超えないようにマックスのプロセスを37件よりしたにしているので、
完全に待ち状態に入っている。
apacheが暇になるまで待たされることになってしまった。
ちなみにアクセスログにはこのようなログが表示されていた。
::1 ::1 – – [13/Jan/2017:00:05:28 +0900] “OPTIONS * HTTP/1.0” 200 – “-” “Apache (internal dummy connection)” 696
これは、子プロセスをシャットダウンするときに現れるものらしく、完全に溢れている状態といえる。
Twitterからやってきました(ゾロゾロ
プロセスが増えた原因は、子プロセスがある程度居なくなった後に
アクセスログに大量に表示された。
一部をスクショしてみる
同じ時間にこんなに!!
こんなにといってもそれなりに普通のサイトだったら平気なのかもしれないけれど、うちはギリギリでやっているところだから、これでもきつい。
一部しか撮っていないけれど、ほぼ同じタイミングであと8件のアクセスがあったから、16件も同時アクセスがあった。
ユーザーエージェントにTwitterbot/1.0と書いてある。
やはりTwitterか…
お前の正体はなんだ
Twitterの開発者用ドキュメントにこんなページがあった。
https://dev.twitter.com/ja/cards/getting-started
Twitterカードのことを調べに来るクローラーだそうだ。
Twitterカードとは、URLをツイートしたら写真とかタイトルとかキレイな感じに表示させてくれるあの仕組みのことで、
うちはWordpressのテーマのおかげなのかプラグインのおかげなのかわからないけれど、Twitterカード用のメタタグがついているので、
URL付きツイートをするとキレイに装飾されたツイートになる。
このドキュメントには書いていないけれど、もしかしたらリンクをクリックしたら改めてボットが確認しに来るのかもしれない。
Twitterのリンクは短縮URLが貼られていて、まずTwitterのページがリダイレクトしてリンク先のサイトに飛ばされるのだけれども
リダイレクトより前にボットがサイトにアクセスしに来るらしいので、アクセス待ちの最後尾の方になるので表示されなかった。
なぜ大量のアクセスをしに来るのかはわからないけれども、表示しようとした記事だけでなく別の記事にも同時にボットが来ているので、もしかしたら同じサイトでTwitterがキャッシュを持っているページにはまとめてくる仕様になっているのかもしれない。
解決方法はないのか?
解決方法はなさそうだな。
VPNのプランを上げる前に、チューニングをもう一回見直して、上限上げられるかどうかを考えようかと思う。