LoginSignup
29
27

More than 5 years have passed since last update.

memcachedの同時接続数に余裕があるのに接続できなかった原因

Posted at

ソーシャルゲームのインフラ担当をしていた時の失敗談です。

なぜか接続が混みあう

・運用開始後は特に問題なく動いていたが、イベント開始した次の日にユーザから接続できないというお問い合わせが大量にくる。

・イベントだったので、サーバ台数を増やしていたこともありサーバの負荷には問題がない。

・アプリ開発者にインフラは問題ないと伝える。

・memcachedサーバがアクセス数に比べて負荷が低いのがおかしいと言われる。

・memcachedの何かがおかしい。調べることにする
 下記が調べた結果になります。

memcachedの設定値

memcached -d -p 11211 -m 2048 -c 10000

同時接続数:10000
メモリ割当:2GB

memcachedの設定は問題なさそう
やっぱりインフラに問題ないと言おうかと思ったが、アクセス数とmemcachedサーバの負荷が比例していないのがおかしい。もしかしたら、memcachedにうまく接続できていないのじゃないかと思い、接続関係を調べなおす。

原因

ググっていたら同じような現象がおきたブログを発見。
どうも「net.core.somaxconn」の設定が原因の可能性があるとわかり、調べてみる

# sysctl net.core.somaxconn
net.core.somaxconn = 128

この設定だと128に切り詰められてしまい、負荷が高いサーバでは接続要求を取りこぼしてしまうことがあるとのこと

対応

/etc/sysctl.conf

net.core.somaxconn = 10000

memcachedを再起動

設定変更後は、接続できないというお問い合わせはこなくなりました。

net.core.somaxconnは大量コネクションを必要とするサーバ設定の定番チューニングみたいです。

net.core.somaxconnの影響

net.core.somaxconnはOSレベルの接続キューの最大長として、TCPソケットで待ち受けるサービス全般に影響を与えます。具体的には、アプリケーションレベルで指定した接続キューの最大長 > net.core.somaxconnの場合、接続キューの大きさは暗黙にnet.core.somaxconnに切り詰められている可能性があります。

参考

http://tetsuyai.hatenablog.com/entry/20111220/1324466655
http://dsas.blog.klab.org/archives/51977201.html

29
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
27