前回更新「ぼくんちのTV別館 (さくらのVPS X3台)、80万PV/dayで限界を迎えた後のチューニング(簡易版) / (時系列版)」で漏れてしまったメモをこのページに残しておきます。
- サーバー復旧の初期段階でメモしたもの
- 色々とチューニングする過程
- 記事の推敲過程でボツになった部分
これらの段階で省いた情報がこのページに記載してあります。
完全に個人用のメモページです。読む価値なしです。
復旧中に参考にしたリンク
サーバー復旧途中、5月20日~21日にかけてメモしたもの。
- 一部のドメインが無反応になった挙動の復旧
- Apacheのエラー:Could not reliably determine the server's fully qualified domain name~とメッセージが出たときの対応 - yummy-yummy
今回の私の場合、最初に目につく症状はコレだった。
原因はApacheや名前解決ではなかったらしく、効果なし。
- Apacheのエラー:Could not reliably determine the server's fully qualified domain name~とメッセージが出たときの対応 - yummy-yummy
- MaxClientsやKeepAliveの調整1回目
- ApacheによるWebサーバ構築(16):Apacheパフォーマンス・チューニングの実践(2/2) - @IT
- keep-aliveのことをちゃんと考える2 | 株式会社インターオフィス
MaxKeepAliveRequests は一回の(一連の)リクエストあたりの平均的な要求ファイル数より少し(多くではなく)少なく設定、◦KeepAliveTimeoutは1-2秒程度の非常に短い値を設定 - 中規模サイトのApacheチューニング - Qiita
忙しいサイトは「StartServers、MinSpareServers、MaxSpareServers、ServerLimit、MaxClients」の値を全部おなじにする設定もアリ。
MaxSpareServers 120
MaxClients 120
MaxMemFree 2048
にしてみた。
- MaxClientsやKeepAliveの調整2回目
- 5万PV/hour 超えると、上記設定でも駄目だった。
さくらのVPS 1GBではメモリが足りなくなった。 - MaxKeepAlive OFF
StartServers 80
MinSpareServers 100
MaxSpareServers 100
MaxClients 100
MaxRequestsPerChild 8000
MaxMemFree 768
これで余裕が出来た(多分) - Apacheがメモリ足りなくて息しなくなったので、調べてみた。 - Ich lerne Ruby on Rails for Africa
「apache2さんが30個ぐらいプロセス立ち上げて合計90%ぐらいのメモリを占有してました」30個でもメモリ一杯の場合もあるのか・・・・ - Linuxブログ : 【トラブル】apacheがよく応答無しになるので調べてみました-その2(設定ファイル)-
Apacheのメモリ不足には MaxMemFree の指定が効く。他はあんまり効果がない。
- 5万PV/hour 超えると、上記設定でも駄目だった。
- iptablesの調整
- 続・間違いだらけの負荷対策 - pullphone's blog
今回の私の場合、まさにこれ。 - 上を理解できるようになってから下を読む
あなたの大量配信サーバ、ip_conntrack溢れていませんか?│株式会社イー・エージェンシー
- 続・間違いだらけの負荷対策 - pullphone's blog
- 全体的なチューニング
- 画像配信サーバを運用していますが、アクセス数急増により、表示... - 人力検索はてな
あとで。時間のある時にゆっくりと読む。
- 画像配信サーバを運用していますが、アクセス数急増により、表示... - 人力検索はてな
- その他
- 何時の間にかエラーログ「PHP Notice: Possible SYN flooding on port 80. Sending cookies.」「possible SYN flooding on port 80. Sending cookies.」が記録されるようになっていた。
- php Noticeは記録されないように設定していた記憶があるのだけど、知らない内に戻ってた?
- 小岩以上アキバ未満~記憶のディザスター~:CentOS6などでdmesgにpossible SYN flooding on port(SYN flooding警告)が出た場合の対策方法を考えてみるテスト
- Linuxサーバで負荷試験するにあたって - Qiita
- むうう。ここでも溢れているのか。いずれ調整する。
- 「SYNの取りこぼし」で読みやすかったサイト
DSAS開発者の部屋:高負荷サイトのボトルネックを見つけるには
「net.core.somaxconn」
- 「SYNの取りこぼし」で読みやすかったサイト
- おまけ: Notice: Undefined index と言われたら | NeGiMeMo.net
- net.ipv4.tcp_max_syn_backlog
- 上の「SYNが溢れた」時の調整項目
- Linux(CentOS6)カーネルチューニングのメモ | ちゃんと覚えておけよ?
- メモ: まだ読んでいない。他のサイトも巡ってみるコト。
- 何時の間にかエラーログ「PHP Notice: Possible SYN flooding on port 80. Sending cookies.」「possible SYN flooding on port 80. Sending cookies.」が記録されるようになっていた。
ぼくんちの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箇所
- phpはごく単純なもの。
- VPS B ・・・・・ 画像サーバー
- css や javascript なども含め、静的なコントンツは全てここ。
(単純なリクエストに答えるだけなのにNginxじゃなくApache) - mod_evasive でDOSアタック対策
(アクセス速度が速すぎます、とメッセージ表示)
- css や javascript なども含め、静的なコントンツは全てここ。
- VPS C ・・・・・ アクセス解析ツール + 1MB超えたファイルなど
- アクセス解析ツールは mogura plusX
※ 今はたぶんMogura改の方が高速&高機能。
※ ログが肥大化し過ぎないよう、定期的にログ削除 - 逆アクセス解析に Sim Access を利用。
※ ちょっと改造してる。
※ 負荷対策で検索流入や知恵袋系サイトのカウントは除外
※ サイト内ではこのページ後半で紹介 - 1MB超えたファイル・・・・デジカメ撮って出し画像など。
- アクセス解析ツールは mogura plusX
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
▲こんな風にしようかな・・・・?