PSPカスタムテーマあぷろだですが、3/3(月)には長時間のサービス停止を招いてしまい、ご利用の皆様にはすみませんでした。
言い訳と現状報告を少し。
最近503が出やすいということもあり、実はサーバを再度移転しようと思ってここしばらく準備してきていました。ホスティングサーバのCPUが突然Celeronに変わった日(2月1日)にカッとなって海外のホスティング業者に申し込みしたので、ちょうど1ヶ月くらいですね。(あ、CPUはその後さすがにXeonに戻りました)
で、新サーバのほうは今まで使ってたPostgreSQLがイマイチだったのでMySQLに移行したりとか、でもってテストにも一週間くらいかけて、よし大丈夫だとDNSを切り替えたところ...。
一時間くらいしたら、突如アクセス不能に。え? なんで? と思ったら、public_html フォルダのパーミッションが 000 になってるじゃないですか。Ownerも root になってるし。凍結です。うわぁ...。
CPU的にも帯域的にも全然余裕な計算だったのに、何で何で? と思ってたら連絡が来ました。海外の業者なので当然英語でしたが、要約すると「ユーちょっとコネクション数が多いネ。フォルダはdisableしたヨ。接続数を減らすか、契約プランをアップグレードするか、考えてみてネ!」という感じ。(ここには書きませんが、「サーバのMaxClients はいくつに設定してあるところ、ユーがいくつ使ってる」と具体的な数字を教えてくれました)
せっかく Bandwidth が1ヶ月15,000GBだイヤッホゥ! と思ってたのに、まさかコネクション数で制限されるとは...。
とりあえずこれまで使ってたサーバに巻き戻しましたが、この新鯖、どう使えばいいかなぁ。資源的にはCPUもディスクも転送量もものすごく余裕があるんだけど。重くてもいいけど利用者の少ないような処理担当?
とりあえず、凍結されるまでの間にアップロードされたファイルはなかった(public_htmlが凍結されただけで、DBの内容はphpMyAdminから見られる)ので一安心ですが、とりあえず凍結解除の依頼を出すことにしました。英語で。どうやって書けばいいんだ? えっと、もう巻き戻したから、「コネクションのナンバーをリデュースしたから、フォルダをイネーブルしてください」って感じか?
そしたら「ユーが本当にアカウント保持者本人か確認したいので、ログインIDとクレジットカード番号の最後の4桁を送ってネ」と来た。やりとりはWebベースのヘルプデスクシステムで、SSLは通してるので、まあ大丈夫かと送り返してみたら、次は「本人だということは確認できたヨ。ユーがどういう方法でこの問題を解決しようとしてるのかを、詳しく説明してネ。そしたらイネーブルするよ」だって! 詳しく説明!? ここまでは「○○してネ」と言われたのを「○○しました」とオウム返しすればよかったんですが、最終関門は自由作文というわけです! この英作文を突破しないとフォルダは返してもらえないのか...。
あと、本筋には影響ないと思うんだけど、「結び」をどうしたらいいのか、ニュアンスがわからない。日本語だと「よろしくお願いいたします」に当たる部分。
向こうから来るメッセージはだいたい、次のような感じになってます。
Hello,
(本文)
Thank you for your attention on this important matter.
---
Kind Regards,
(担当者名)
担当者は途中で変わったんだけど、2番目の人の結びは「Best Regards,」でした。ざっとググった感じでは、
(フォーマル) Sincerely > Kind Regards ≒ Best Regards > Regards >Thank you (カジュアル)
といった雰囲気でした。向こうが Best Regards なんだからこっちもそう書いておけばいいのか。
そんなわけで現在、凍結解除待ちです。解除されたら、いちど現鯖で体勢を立て直して、それから新鯖とどう処理を分担するか考えるとしましょうか...。
VPSだったら、CPUも転送量も接続数も心配しなくてよくなるのかなぁ...。
同時接続数が問題ということであれば、keep
-aliveをOFFにしてみるといいかもしれません。
http.confの設定にもよりますが、.htaccessでも設定できたはずです。
毎回TCPコネクションを張りなおすので、ブラウザの表示速度が多少おち、サーバのCPU負荷も多少上がりますが、何も通信しない状態でタイムアウトを待つソケットがなくなるので同時接続数は下がるはずです。
# Keep-Alive timeoutの値を調整する手もありますが
# すぱっとOFFにしてしまったほうがよいかと
とはいえ、盛大に制限をオーバーしている状態であれば
焼け石に水の可能性もありますのでご注意ください・・・また凍結されてしまったら面倒だと思いますし
アドバイスありがとうございます! そういう方法もあるのですね。
試してみましたが、残念なことに、そのレンタルサーバでは.htaccessでkeep-alive関係の設定はできないようでした。
(そして今のサーバはkeep-aliveがオフになっていることにはじめて気付きました)
CGIやPHPだったら、HTTPヘッダに「Connection: close」と書いておけば良いでしょうから、そっちのサーバは動的リソース中心に使うのはありかもしれないと思い始めました。参考になりました!
鰓出ました。
とりあえず報告。
エラーメッセージ:
undefined method `[]' for nil:NilClass
rating.cgi:56
./lib/uploader.rb:39:in `page'
rating.cgi:5