これらのエラーのうち、1 秒以内に 10 から 20 のエラーが発生します。
Memcache_connect 接続がタイムアウトしました
これは、1 日あたり約 2500 人のアクティブ ユーザー、1 GB の RAM を持つサーバーで、1 日に数回発生します。サーバーが入れ替わっているとは思えません。ほとんどの場合、メモリ使用率は 75% 未満で、CPU 使用率は 25% 未満です。通常、平均負荷は 9 未満です。ここのデバッグ手順に従いました: http://code.google.com/p/memcached/wiki/Timeouts
これが私のmemcache統計です:
stats
STAT pid 15365
STAT uptime 173776
STAT time 1329157234
STAT version 1.2.8
STAT pointer_size 32
STAT rusage_user 1171.316354
STAT rusage_system 7046.435826
STAT curr_items 28494
STAT total_items 4039745
STAT bytes 3371127
STAT curr_connections 36
STAT total_connections 102206685
STAT connection_structures 328
STAT cmd_flush 0
STAT cmd_get 73532547
STAT cmd_set 4039745
STAT get_hits 40779162
STAT get_misses 32753385
STAT evictions 0
STAT bytes_read 2153565193
STAT bytes_written 38768040520
STAT limit_maxbytes 67108864
STAT threads 2
STAT accepting_conns 1
STAT listen_disabled_num 0
私の仮説は、TIME_WAIT バケットが不足しているということです。
netstat -n | grep TIME_WAIT | wc -l
51892
しかし、それが高すぎるかどうかはわかりません。私は Solaris (Joyent サーバー上) を使用しており、tcp_time_wait_interval
60000 に設定されています。他の読み取りでは、この設定を 30000 または 15000 に減らすことが提案されています。しかし、これはスケーラブルなソリューションとは思えません。
バケットが不足していることをどのように知ることができますか? TIME_WAIT バケットの数を増やす必要がありますか? もしそうなら、どのように?