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個のキーをフェッチできるかもしれません。しかし、疑問はまだあります。
あなたの親切な返事を期待しています。ありがとう!