web-dev-qa-db-ja.com

Memcachedが2秒以上ハングする原因は何ですか?

Memcachedをスケーリングしようとしています。彼らのサイトから:

Memcached操作はほとんどすべてO(1)です。それに接続してgetまたはstatコマンドを発行することは決して遅れてはなりません。接続が遅れる場合は、最大接続制限に達している可能性があります。監視する統計の詳細については、ServerMaintを参照してください。

コマンドの発行が遅れると、チューニングの問題がいくつか発生する可能性があります。最も一般的なのはハードウェアの問題で、十分ではありませんRAM(スワッピング)、ネットワークの問題(帯域幅、パケットのドロップ、半二重接続)。まれにOSのバグまたはmemcachedのバグが原因である可能性があります。

まあ..それは私にとってO(1)操作のように実行されていないことは間違いありません。私たちのサイトの低から通常の負荷の下では、getおよびsetopsのmemcached応答時間は約0.001秒です。悪いですが、負荷を3倍にすると、100倍(まれに1000倍!)かかる外れ値が発生します。memcachedが値を格納するのに2.2442秒かかるインスタンスも1つありました。

明らかに、これは私たちのサイトを殺しています。

遅い期間の1つでのMemcached-> getStatsの出力は次のとおりです。

        [pid] => 18079
        [uptime] => 8903
        [threads] => 4
        [time] => 1332795759
        [pointer_size] => 32
        [rusage_user_seconds] => 26
        [rusage_user_microseconds] => 503872
        [rusage_system_seconds] => 125
        [rusage_system_microseconds] => 477008
        [curr_items] => 42099
        [total_items] => 422500
        [limit_maxbytes] => 943718400
        [curr_connections] => 84
        [total_connections] => 4946
        [connection_structures] => 178
        [bytes] => 7259957
        [cmd_get] => 1679091
        [cmd_set] => 351809
        [get_hits] => 1662048
        [get_misses] => 17043
        [evictions] => 0
        [bytes_read] => 109388476
        [bytes_written] => 3187646458
        [version] => 1.4.13

したがって、これまでに除外したことは次のとおりです。

  • 最大接続制限に達する(curr_connections of 84は、デフォルトの最大1024を大幅に下回っています)
  • スワッピング-マシンには、専用マシンのmemcached専用の1024Mのメモリのうち900Mがあります。 bytes統計によると、約7MBのデータしか使用していないようです。

他のハードウェアの問題をどのように診断しますか? prstatは、CPUまたはメモリの使用量に関して実際には多くのことが起こっていることを示していません。ネットワークの問題を把握する方法はわかりませんが、これはWebボックスと同じプライベートネットワーク上の専用サーバーであるため、接続の問題ではないと思います(pingはボックス間のミリ秒未満です) 。

私がここで見逃しているものは他にありますか?それは私を狂わせています。

編集:また、影響を最小限に抑えて、またはまったく影響を与えずに、持続的接続と非持続的接続の両方を試したことにも言及するのを忘れました。

2
Brad Dwyer

問題は、呼び出し側のマシンがCPUをすべて使い果たして、TCP接続が大幅に遅れる原因となっていたことです。Web層を水平方向にスケーリングすると、問題が修正されました。これは、 memcachedの問題はまったくありません。これは、この他の問題の症状が発生した場所です。

0
Brad Dwyer

Memcachedのパフォーマンスは、スワップメモリ​​を使用すると大幅に低下する可能性があります。サーバーでスワップメモリ​​が使用されていることに気付いた場合は、-kオプションを指定してmemcachedを起動してみてください。

差出人: http://code.google.com/p/memcached/wiki/NewHardware#Avoid_Swapping

交換を避ける

Memcachedサーバーに、数パーセント余分に物理メモリを割り当てます。メモリを過剰に割り当てないでください。スワップによって節約できると期待してください。パフォーマンスは非常に悪くなります。サーバーがスワップを使用しているかどうかを監視し、必要に応じて調整するように特に注意してください。

2
Nikhil

オペレーティングシステムをSmartOSからUbuntuに変更しましたが、問題は解決したようです。理由はわかりませんが、memcachedとOSの間で問題が発生したようです。

1
Brad Dwyer

また、あなたが思っているように持続的接続が実際に機能していることを確認してください。 (6年前の私の最初の質問です...それでも❤️あなた...)

0
Brad Dwyer