「ECサイトで鬱になる」その後(完)

最近サーバの勉強をしないとなあとふつふつと感じてる。
専用サーバかVPS借りてやらんといかんなーと。
暑い名古屋では自宅サーバは無理なのです。
電気代、固定IP代とかいろいろ含めると、外部で借りたくなるというもの。

で、サーバ管理で思い出すのが、とあるECサイトのお手伝いをした時に痛い目にあった事。
「ECサイトで鬱になる」その1
「ECサイトで鬱になる」その2
結局この案件はシステム会社さんへ引き継ぐことになった。(大分前)
僕の実力&経験不足で会社にもお客さんにもいろいろ迷惑かけました。

ということで、今回はあん時のログを見ながらVPSを使って痛い目にあったの時のログを振り返ろうかと。

まずは普段の状態でtopコマンド叩いたらこんな感じ。
#平穏時

top - 15:58:50 up 15 days, 17:24,  1 user,  load average: 0.06, 0.11, 0.09
Tasks:  45 total,   1 running,  44 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.8% us,  0.2% sy,  0.0% ni, 97.9% id,  0.2% wa,  0.0% hi,  0.0% si
Mem:   7783444k total,  7622528k used,   160916k free,   249076k buffers
Swap:  4192956k total,     1312k used,  4191644k free,  2846752k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      15   0  1704  616  528 S    0  0.0   0:42.78 init
 7204 root      15   0  1608  552  460 S    0  0.0   0:19.34 syslogd
 7208 root      18   0  1560  392  320 S    0  0.0   0:00.00 klogd
 7236 root      15   0  2160  832  688 S    0  0.0   0:27.13 xinetd
 7255 root      18   0  2224 1148  980 S    0  0.0   0:00.01 mysqld_safe
 7294 mysql     18   0 95740  17m 3668 S    0  0.2  36:21.65 mysqld
 7336 postgres  18   0 15448 2640 2324 S    0  0.0   0:03.49 postmaster
 7344 postgres  15   0 15448  900  576 S    0  0.0   4:58.07 postmaster
 7345 postgres  15   0  6228  728  408 S    0  0.0   0:19.57 postmaster
 7346 postgres  18   0  5452  908  464 S    0  0.0   0:00.00 postmaster
メモリーはサーバ全体で載ってる8GBと表示されてる模様。
そのうち割り当てられていたのが、1.5GBぐらい。
CPUはどうなんだろ、サーバ全体の様子が出ているのかな?
ともあれload averageを見ての通り平和ですよ、平和。

次はテレビで放送された日のtopコマンドの結果がこちら。
#カオス時

top - 16:56:55 up 17 days, 18:22,  1 user,  load average: 38.18, 35.37, 33.50
Tasks:  83 total,   6 running,  77 sleeping,   0 stopped,   0 zombie
Cpu(s): 70.1% us,  4.0% sy,  0.0% ni, 25.0% id,  0.9% wa,  0.0% hi,  0.0% si
Mem:   7783444k total,  7469416k used,   314028k free,   168584k buffers
Swap:  4192956k total,     1180k used,  4191776k free,  2543672k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
11635 apache    16   0 36840  18m 3504 D   15  0.2   0:02.82 httpd
 3543 apache    16   0 36916  18m 3924 D   12  0.2   0:22.78 httpd
 6072 apache    18   0 37208  18m 3800 D   12  0.2   0:19.85 httpd
21672 apache    15   0 37564  19m 4080 S   11  0.3   1:42.23 httpd
13502 apache    16   0 36700  17m 3324 D   10  0.2   0:01.46 httpd
24038 apache    16   0 36800  18m 3984 D   10  0.2   0:35.20 httpd
32667 apache    16   0 36768  18m 4080 D   10  0.2   0:52.75 httpd
12171 apache    16   0 36660  18m 4084 D    9  0.2   1:34.54 httpd
 5393 apache    15   0 38260  20m 4092 D    8  0.3   1:47.14 httpd
14090 apache    15   0 37268  19m 4040 D    8  0.3   1:36.27 httpd
21619 apache    16   0 36824  18m 4052 D    6  0.2   1:10.11 httpd
load averageが38とか無いわー。
もうhttpdのプロセスだらけ。

netstatでアクセスしてきてるクライアント数をチェック。
netstat -n | grep ':80'| grep -v TIME_WAIT |wc
    493    2958   43877
500程度。

でも、ApacheのMaxClientsはというと・・・
[httpd.conf]
StartServers         8
MinSpareServers      5
MaxSpareServers      20
ServerLimit          256
MaxClients           50
MaxRequestsPerChild  4000
悲惨。

CPUに負荷がかかりまくっている原因はいろいろあるらしいんだけど、メモリかなーと思って見てみる。
普通はfreeコマンドとかで良いんだろうけど、VPSでVirtuozzo/OpenVZだと、こんなコマンドでみられるらしい。
cat /proc/user_beancounters
Version: 2.5
       uid  resource           held    maxheld    barrier      limit    failcnt
2083002413:  kmemsize       15159774   16562463   30793728   33865728          0
            lockedpages           0          6         50         50          0
            privvmpages      174706     198048     393216     412877          0
            shmpages           4616       7192      98304      98304          0
            dummy                 0          0          0          0          0
            numproc             103        124        300        300          0
            physpages        109650     128926          0 2147483647          0
            vmguarpages           0          0     131072 2147483647          0
            oomguarpages     109660     128936      32768 2147483647          0
            numtcpsock          213        346        768        768          0
            numflock             18         61       2048       2048          0
            numpty                1          4         48         48          0
            numsiginfo            0         54        200        200          0
            tcpsndbuf        620224    4845588    4718592    6684672  361494838
            tcprcvbuf        676344    1310696    4718592    6684672          0
            othersockbuf      23904     190512    4915200    6963200          0
            dgramrcvbuf           0       9560    6291456    6291456          0
            numothersock         45         94        800        800          0
            dcachesize       226024     273685    3145728    3145728          0
            numfile            1961       2424       8192       8192          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            numiptent            14         14        400        400          0
tcpsndbufのfailcntはまあ良いとして(良くないけど、過去の値っぽいので)。
メモリーは足りてそう。

となるとネットワークかディスクI/Oか。
この時、アプリケーション側でMySQLの最大同時接続数エラーでまくり。
最大数が20だったのに、500クライアントも繋ぎにこればそりゃ駄目だわなー。

vmstatコマンド叩いた結果も見たかったんだけど、ログが見つからなかった。
もしかして見てないかも。
経験不足だなーてんぱってただろうしなあ。

キャッシュを上手く使いたかったけど、ECサイトという側面から、在庫数とかそういうのはリアルタイムで表示しないと駄目なわけで、なかなか上手いこと組み込めなかった。
CPUの負荷が上がっているのが、ネットワークやディスクI/Oが原因と分かったところで、こちらは手の打ちようが無かった。
あったかも知れんけど、僕には出来んかった。
結局は嵐が去るのを待っただけだったなあ。

これは僕の個人的な見解だけど、やっぱ根本的にサーバの性能が足りなかったなあと思った。
普通のHTMLを表示するだけでも、なんだかもたついている感じがしたし。
これで4万とか5万とか月々かかってるんだぜ?
専用サーバの方が明らかにコストパフォーマンス高いよなあ。
まあ、バックアップとかは向こうでやってくれたし、なんかあった時は相談に載ってくれたけど(大した答えは帰ってこなかったけど)

あと負荷対策で直ぐ思いつくのがロードバランサの利用だけど、そんなことやったこともないし。
試してみたくても費用がかかるし。
そもそも一般的なVPSサービスでロードバランサまで面倒見てくれるホスティング会社となると、かなり絞られるし。
もしそうなっても、セッションをDBで管理することになるのかもしれないので、プログラム修正しなかんし。
(これはロードバランサの機能でなんとかなるらしいけどさ)

とまあ、VPSに全く良い思い出が無いんだよね。

そもそも一番最初はメモリが256MBのプランだったんだけど、立ち挙げた瞬間からメモリ不足になるし。
まあ、最初からMLとか動いているからなんだろうけど、そこは切っておけよと。
とにかく全体的に動作ももっさりしている印象が強い。

国内のVPSは多分どこも同じ様な感じだと思うんだよなあ。
この頃よりは、それぞれ性能は上がっているだろうけどさ。
逆にさくらとかの共有サーバの高いプランの方が、下手なVPSより安定してんじゃないのかと思うのよね。

僕のプログラムがいかんかったのかなとも思うけど、んー、どうなんだろ。
結局のところは良くわからんけど、そんなこんなで海外のVPSを借りて、サーバ管理の経験を積みたいなと思っているのです。

海外のVPSならXenで月額20ドルとかあるしなー。
まあ、問い合わせが英語ってのが不安だけど、国内で借りてもVirtuozzo/OpenVZは嫌なんだよねー。

ということで振り返りでした。


※素人の戯言なので、間違っている点やもっとこうした方が良かったのにとかあれば教えてもらえたらと思います!

コメント

アーカイブ

2012

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12

2011

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com