1. http://www.whalin.com/memcached/ v2.0.1
2. http://code.google.com/p/spymemcached/ v2.2
a. 使用whalin版会导致File Descriptor leak,而使用spy版则不会,原因是whalin版没有使用selector管理socketchannel.
Thread.sleep(1000 * 30);
System.out.println("begin");
Selector selector = null;
SocketChannel channel = null;
try {
String host = "192.168.0.74";
int port = 11211;
int timeout = 1000 * 60;
selector = Selector.open();
channel = SocketChannel.open();
channel.configureBlocking(false);
channel.connect(new InetSocketAddress(host, port));
channel.register(selector, channel.validOps());
try {
selector.select();
} catch (IOException e) {
e.printStackTrace();
}
Iterator it = selector.selectedKeys().iterator();
int i = 0;
while (it.hasNext()) {
i++;
System.out.println(i);
SelectionKey selKey = (SelectionKey) it.next();
it.remove();
try {
processSelectionKey(selKey);
} catch (IOException e) {
e.printStackTrace();
selKey.cancel();
}
}
System.out.println("unclose");
Thread.sleep(1000 * 30);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (channel != null && channel.isOpen()) {
try {
channel.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (selector!=null) {
selector.close(); // not fd leak
}
}
System.out.println("end");
Thread.sleep(1000 * 30 * 1);
通过lsof -p pid | grep pipe可以观察是否有fd leak.
b. w版set 1000000 object 需要600s左右,s版只需150s左右