1

SpymemcachedをmemcachedJavaクライアントとして選択します。これは、応答のないsetメソッドが、他のmemcachedクライアントよりも10倍速いように見えるためです。

私のコード:

memcachedClient.set(key、0、value);

それ以外の:

memcachedClient.set(key、0、value).get();

セットの結果よりもはるかに多くの時間コストを気にします。

今でははるかに高速に見えますが、memcachedクライアントでメモリリークが発生する可能性があります。

memcachedサーバーと同じコンピューターで4を実行すると、memcachedクライアントプロセスごとに2Gメモリが処理されます。そして、8コアのCPUと4Gメモリはほぼ完全に消費されています。ローカルネットインターフェイス「lo」は、わずか約0.2ギガビット/秒です。

CPUとメモリの消費率を下げ、memcachedqpsを高速化するにはどうすればよいですか。

memcachedクライアントから280kqpsが必要です。各qpsは、50Bのキー長と500Bの値の長さのデータを送信します。ここで、ネットワークインターフェイスの帯域幅の制限を回避するために、ローカルホストでmemcachedクライアントを起動しようとしています。4つのmemcahcedプロセスで、それぞれが6つのスレッドを実行します。これで、目標からはほど遠い180qpsをほぼ実現でき、CPUとメモリが制限になります。また、実際のJavamemcachedクライアントを含む同じコンピューターでストームを実行する必要があります。したがって、もちろん、memcachedクライアントがコアリソースを使用することを許可することはできません。

CPUとメモリの消費を減らすにはどうすればよいですか、または単一のコンピューター上の複数のJavamemcachedクライアントと分散memcachedサーバーの間で280qpsを実現するにはどうすればよいですか。

getとsetの両方がクエリの半分を取ります。getMultiを試して毎回50個のキーをフェッチできるかもしれません。しかし、疑問はまだあります。

あなたの親切な返事を期待しています。ありがとう!

4

1 に答える 1

0

memcached を使用した複数取得クエリの最適化については、https: //groups.google.com/forum/?fromgroups#!topic/memcached/n8zLJRyYNY4 をご覧ください。

于 2013-06-07T05:09:20.990 に答える