web-dev-qa-db-ja.com

600以上のmemcachereq / sの問題-ヘルプ!

サーバーでmemcachedを実行していますが、600 req/sに達すると不安定になり、大きな問題が発生します。リクエストレートが非常に高くなると、私のPHPアプリケーションがランダムにmemcacheサーバーに接続できなくなり、読み込み時間が遅くなり、nginxとphp-fpmが異常になり、受信します。 104の束:nginxログのピアエラーによって接続がリセットされました。

Memcacheサーバーに「ホットオブジェクト」があることを指摘したいと思います。これは、memcacheリクエストの90%を受信することがあるオブジェクトです。また、非常に多くのリクエストが1つのオブジェクトにヒットすると、ページ全体の読み込み時間が少し長くなることに気付きました(読み込みに成功したとき)。

この問題の助けをいただければ幸いです。本当にありがとう!

1
Aco

これは本当にネットワーク層の問題のように聞こえます。この問題が発生したときに、netstat -anoの出力を取得して、特定のバケットにある接続の数を確認できますか? ESTABLISHEDではなく、TIME_WAIT/FIN_WAITなどに大量の接続が表示される場合は、時間待機の再利用とリサイクルを有効にする必要があります。から:

http://www.speedguide.net/articles/linux-tweaking-121

TCP_TW_REUSEこれにより、プロトコルの観点から安全な場合に、新しい接続にTIME_WAIT状態のソケットを再利用できます。デフォルト値は0(無効)です。これは通常、tcp_tw_recycleのより安全な代替手段です。

echo 1>/proc/sys/net/ipv4/tcp_tw_reuse(ブール値、デフォルト:0)

注:tcp_tw_reuse設定は、Webサーバーなど、多数の短い接続が開いていてTIME_WAIT状態のままになっている環境で特に役立ちます。ソケットを再利用すると、サーバーの負荷を減らすのに非常に効果的です。

2
polynomial