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を大幅に下回っています)bytes
統計によると、約7MBのデータしか使用していないようです。他のハードウェアの問題をどのように診断しますか? prstatは、CPUまたはメモリの使用量に関して実際には多くのことが起こっていることを示していません。ネットワークの問題を把握する方法はわかりませんが、これはWebボックスと同じプライベートネットワーク上の専用サーバーであるため、接続の問題ではないと思います(ping
はボックス間のミリ秒未満です) 。
私がここで見逃しているものは他にありますか?それは私を狂わせています。
編集:また、影響を最小限に抑えて、またはまったく影響を与えずに、持続的接続と非持続的接続の両方を試したことにも言及するのを忘れました。
問題は、呼び出し側のマシンがCPUをすべて使い果たして、TCP接続が大幅に遅れる原因となっていたことです。Web層を水平方向にスケーリングすると、問題が修正されました。これは、 memcachedの問題はまったくありません。これは、この他の問題の症状が発生した場所です。
Memcachedのパフォーマンスは、スワップメモリを使用すると大幅に低下する可能性があります。サーバーでスワップメモリが使用されていることに気付いた場合は、-k
オプションを指定してmemcachedを起動してみてください。
差出人: http://code.google.com/p/memcached/wiki/NewHardware#Avoid_Swapping
交換を避ける
Memcachedサーバーに、数パーセント余分に物理メモリを割り当てます。メモリを過剰に割り当てないでください。スワップによって節約できると期待してください。パフォーマンスは非常に悪くなります。サーバーがスワップを使用しているかどうかを監視し、必要に応じて調整するように特に注意してください。
オペレーティングシステムをSmartOSからUbuntuに変更しましたが、問題は解決したようです。理由はわかりませんが、memcachedとOSの間で問題が発生したようです。
また、あなたが思っているように持続的接続が実際に機能していることを確認してください。 (6年前の私の最初の質問です...それでも❤️あなた...)