We have a .net multithreaded client app accessing a single memcache bucket on Couchbase 2.2. Performance does not scale well above 16 threads. The client machine is a 24 (physical) core server with 16gb RAM. The couchbase server has 384gb RAM and 8 physical CPUs. CPU and network utilization on both boxes is low.
Our client config is as follows:
CouchbaseClientConfiguration config = new CouchbaseClientConfiguration();
config.Bucket = cacheName;
config.BucketPassword = string.Empty;
config.SocketPool.MaxPoolSize = 200;
Where host is the server name and cacheName is the name of the bucket. On 16 threads average Get performance is roughly 8.5ms per call. That doubles to 17ms per call on 24 threads and continues to deteriorate with more threads. We are using a singleton pattern where all threads use a single CoucheBase client which is returned via a factory method.
Should we be using a MemcachedClient instead? Are we missing anything?