約1ヶ月前の先月末(2011年1月30日)、僕がこの記事を書いたことにより、僕が今までに経験たことがないことが起こった。
280を超えるはてブ数、そしてTwitterからの大量のアクセスだった。
今までそれほどの注目を集めるようなことをしたことがなかった僕は、この事態に驚きつつも、それだけの注目を受けたことに少しばかり嬉しさがあった。
しかしその反面で、ウェブサイトを運営するに辺り、やってはいけないことに直面する。
アクセス集中によるサーバの過負荷と、それによる接続障害
接続障害と書くと少々大げさな気もするが、要はサーバが大量のアクセスを捌ききれなくなり、応答を返せなくなってしまっていた。
ブログの記事を書いたのが深夜。と同時にTwitterとFacebookにその記事を流した。
しばらく様子を見ていたものの、特にいつもと変わらない状況であったため、そのまま眠りについた。
そして翌朝、目が覚めるとブログが表示できない。そう、いつの間にか注目を浴びることとなっていた。
正直どのタイミングから、どのタイミングでそんなに人が流れてきていたかは分からないが、おそらくはTwitterだろう。
ブログ投稿時には、他にもいくつかのブログフィードにPingを送っていたのでそちらからかもしれない。
で、そんなことより朝出勤前から繋がらない。
これでは仕方が無いので、まずは状況を確認。別なサーバに設置していたmuninと、ターミナルからSSHでサーバに入り、重い中どうにかtopコマンドやfreeコマンドなどで状況を確認。Load Averageがひどいことになっている。さらにSWAPが発生しまくっていたことから、メモリSWAPが原因でLAが高くなり、繋がらなくなったとわかる。
まず原因として一番はApache、そしてMySQL。なのでとりあえずこの2つを再起動し、状況が治まってきたことを確認し、まずは出勤した。
稼働環境
現在のこのブログ及び僕が運用しているいくつかのウェブサイトは、すべて同一の環境下で動いてる。
その環境とは…
サーバ: さくらのVPS
CPU: Core2 Duo 2.4GHz (/proc/cpuinfo の情報に基づく)
メモリ: 512MB
サーバOS: CentOS 5.5
ブログシステム: Wordpress 3.0.4_ja
HTTPD: Apache 2.2.x
PHP: 5.3.x
MySQL: 5.1.5x
上記がすべて1つの仮想マシン上で稼動している。
結果
結果的にはWordpressが参照するDBへの同時接続が多くなり、(またMySQLの設定も動作環境に適していなかった)接続が溜りったことにより(?)SWAPが大量に発生し、LAが上昇するという事になっていたようだ。
また、キャッシュ機構はMySQL側にもPHPにもWordpressにもそれぞれ有効にしていたが、それでも足りなかったか、Wordpressのキャッシュ機構を適切に設定出来ていなかったため、急激なアクセス増に対して一気に許容範を超え、負荷が上昇することが、その日のうちに度々発生していた。
一番まずかったのは、その日は仕事中のこともあり、接続できない状態を分かりつつもしばらく対応できない状態が2時間ほど続いたとき、さてサーバにログインし、Apacheの再起動を…と思っていると、ログイン出来ない。それどころか繋がらない(応答しない)。
muninのグラフを見てもチョチョ切れでもはや計測不能。ただし負荷がかかっていることはその前後にかろうじて観測できたグラフから確認できていた。
さくらのVPSの管理画面からシリアルコンソールでつなごうとしても反応がない。仕方が無いのでサーバマシン(仮想)を強制再起動しました。その後再起動をし、無事事無きを得ました。
完全に個人用途で趣味のため、大したウェブサービスが乗っているわけじゃないものの、仕事柄なのか少し焦りました。
あと、別に広告貼ってたりしてるわけじゃないけど、せっかくのアクセスが機会損失になるのも嫌だし、なによりブログを見に来てくれているにもかかわらずつながらなくて見れないのはやっぱり失礼ですしね。
TwitterにURLを流して気付くこと
これはアクセスログをリアルタイムに見ていて気づいたこと。
時間帯も影響するかもしれないが、TwitterにURLを流した瞬間に、まず多数のURL収集ボットがやってくる。
今回深夜にURLを流した際はそれほど来なかったが、以前日中に流してみたときは、ドッと複数のURL収集ボット?がやってきた。それらはおそらくUserStreamを常に監視してURLが流れてくるとその先をクロールし、情報を取得してくるのだろう。
さらに誰かがRTした瞬間に、急激にアクセスが集中する。RTされたタイミングで多くの人がアクセスするのと、自動的にリンク先URLを巡回するクライアント(短縮URLの展開機能?)やボットによってたくさんのアクセスが本当に短時間で集中することになる。
これらによって本当に何度も処理仕切れなくなって応答を返せなくなっていた。
なにが言いたいかというとTwitter怖い。
結論
スラッシュドットジャパンにも紹介されたりもしましたが、今回においてはスラッシュドット効果よりもはてブ効果と、何よりTwitterによる瞬間的なTwitter効果が怖かったです。
そんなわけで、ブログというものはそれ専門で運用している外部のサービスにおいて運用していた方が、安全安心だなと思った次第でした。
(この間のはたまたま集中しただけなので、多分このブログはしばらく動かさないと思います。)
最近作ったアプリの話
先日、コナミ社の提供している コナステ のダウンロードコンテンツゲームを1クリックで起動できるアプリを作り、公開した。 Ks Game Launcher ( Github ) 作った理由として、インストール時に作成されたショートカットをクリックするとブラウザが起動し、ログインし...
-
GitLab Meetup Tokyo #6 にお邪魔してきました。GitLab Meetup Tokyo自体は今回で6回目ですが、僕自身の参加は恐らく二回目。 GitLabはだいぶ以前から使っているも、gitサーバとして複数人で使用する以外は、IssuesもMRも、一人...
-
スマートフォンが普及してからだいぶ経ち、国外からの旅行者向け、観光誘致も込めてまちなかで使用できるフリーWi-Fiもだいぶ普及が進んできました。 おかげで飲食店などに入り、その店内でWi-Fi経由で調べ物をしたりするのにはとても便利だったりします。 しかし、フリーWi-Fiに接...
-
先日発売されたiPhone7をはじめiPhone6以降の機種で、日本でもようやく、Apple Payが使えるようになりました。 iPhone7は長年ユーザーが待ち望んできた防水対応もさることながら、日本向けiPhone7/7 Plusでは、NFCだけでなくFeliCaを搭載し...