前回更新「ぼくんちのTV別館 (さくらのVPS X3台)、80万PV/dayで限界を迎えた後のチューニング(簡易版) / (時系列版)」で漏れてしまったメモをこのページに残しておきます。

これらの段階で省いた情報がこのページに記載してあります。
完全に個人用のメモページです。読む価値なしです。

復旧中に参考にしたリンク

サーバー復旧途中、5月20日~21日にかけてメモしたもの。

ぼくんちのTVの歴史

2007年1月、Livedoorブログでスタート
2007年2月、本館をさくらのスタンダードに引っ越し
 (↑当時のLivedoor blog は画像ファイルは50MBまでしか置けなかったため)
2008年8月、別館もさくらのスタンダードに引っ越し
 (↑検索エンジン経由のアクセスが不便になったため)
2010年10月、さくらのVPSを 1台借りる。画像サーバーとして運用
 (↑3000PV/hourが捌けないため、負荷分散)
2011年1月、さくらのVPS2台目レンタル開始、htmlサーバーとして運用
 (↑5000PV/hourが捌けないため、負荷分散)
2011年7月、さくらのVPS3台目、アクセス解析サーバーとして運用
 (↑アクセス解析ツールの負荷が大きくなって来たので負荷分散)
2012年5月、さくらのVPSがメモリ 512MB から 1GBに増強される
 (↑7000pv/hour の時のロードアベレージが0.3から0.1へ)

以後 現在まで、さくらのVPS(980円プラン)3台体制で安定して稼働。

過去最もアクセスがあった時

2015年2、4万3千PV/hour、ピーク時1千PV/min、障害なく捌く。
 ロードアベレージ0.3前後。「VPS1台でも大丈夫だったかも?」とメモを残す。

今回

2016年5月20日、12万PV/hour、ピーク時2千5百PV/min、画像サーバー撃沈。
 iptablesおよびhttpd clientを中心にチューニングを施す
2016年5月23日、5万PV/hour、ピーク時1千PV/min、画像サーバー撃沈。

サーバー構成の詳細について

  • VPS A ・・・・・ 本体。MTOS5 +PHP化した静的HTML。
    • phpはごく単純なもの。
      PCとスマホの振り分け、include 5か所、乱数でローテーションするコンテンツ 3箇所
  • VPS B ・・・・・ 画像サーバー
    • css や javascript なども含め、静的なコントンツは全てここ。
      (単純なリクエストに答えるだけなのにNginxじゃなくApache)
    • mod_evasive でDOSアタック対策
      (アクセス速度が速すぎます、とメッセージ表示)
  • VPS C ・・・・・ アクセス解析ツール + 1MB超えたファイルなど
    • アクセス解析ツールは mogura plusX 
      ※ 今はたぶんMogura改の方が高速&高機能。
      ※ ログが肥大化し過ぎないよう、定期的にログ削除
    • 逆アクセス解析に Sim Access を利用。
      ※ ちょっと改造してる。
      ※ 負荷対策で検索流入や知恵袋系サイトのカウントは除外
      ※ サイト内ではこのページ後半で紹介
    • 1MB超えたファイル・・・・デジカメ撮って出し画像など。

iptables のパケット漏れについて

「cat /proc/sys/net/ipv4/ip_conntrack_max = 32760」に対し
「cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count = 32760」

  • ピーク時(9時~12時)は毎秒800~1000リクエストが破棄されていた。
  • 一度 目一杯にコネクション張られた状態になると、サーバー再起動するまで解消しない。
    • 夜中に4000PV/Hourまでアクセス減ってもサーバーのレスポンスは回復しない。パケットも破棄され続けていた。
    • これが待ち行列理論というやつか?
    • このエラーログは /var/log/messages を開くと確認できる。
      「ip_conntrack: table full, dropping packet」のメッセージがそれ。5秒おきにカウントされる。

アクセス解析サーバーにもエラーはあった

  • アクセス解析サーバーは余裕があった。
    9時台(12万PV/hour)に エラー400(Bad Request)が30個あった程度。
    • 多分画像サーバーの不調でjavascriptが正常作動せず、クッキーが壊れたのが原因。

サーバーログが貯まり過ぎる。なんとかしたい

  • ログの量を減らしたい。ステータスコードでログを振り分けたい。
    ぶっちゃけ、もう生ログを定期的にローカルに移すのがしんどい。
  • しかし・・・・
    エラーログはカスタマイズできない。(ログファイル - Apache HTTP サーバ)
  • カスタムログをステータスコードで振り分けるには "%!200,304,302{Referer}i" みたいな記述が必要。( mod_log_config - Apache HTTP 2.5)
  • LogFormat "%t %h \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    ▲今のログフォーマット
    LogFormat "%t %h \"%!414r\" %!200,304,302>s %!200,304,302b \"%!200,304,302{Referer}i\" \"%!200,304,302{User-Agent}i\"" combined
    ▲こんな風にしようかな・・・・?