From 7b5b485200aacdb4b91020e014eb358ad3e450d3 Mon Sep 17 00:00:00 2001 From: lyr90329 Date: Wed, 13 Aug 2014 17:45:28 +0800 Subject: [PATCH 1/3] stats --- MemcachedClient/src/common/EMSGID.java | 5 +- .../src/common/RegisterHandler.java | 2 + MemcachedClient/src/server/WebServerMain.java | 48 ++++++------------- MemcachedClient/src/server/webSession.java | 37 ++++++++++---- 4 files changed, 49 insertions(+), 43 deletions(-) diff --git a/MemcachedClient/src/common/EMSGID.java b/MemcachedClient/src/common/EMSGID.java index 8508162..08e658c 100644 --- a/MemcachedClient/src/common/EMSGID.java +++ b/MemcachedClient/src/common/EMSGID.java @@ -16,5 +16,8 @@ public enum EMSGID nm_read, nm_write_1, nm_write_1_res, - nm_write_2 + nm_write_2, + + nr_stats, + nr_stats_res } diff --git a/MemcachedClient/src/common/RegisterHandler.java b/MemcachedClient/src/common/RegisterHandler.java index 69a4ca1..dcaf6e9 100644 --- a/MemcachedClient/src/common/RegisterHandler.java +++ b/MemcachedClient/src/common/RegisterHandler.java @@ -4,6 +4,7 @@ import java.lang.reflect.InvocationTargetException; import messageBody.memcachedmsg.nm_Connected; import messageBody.requestMsg.nr_Connected_mem_back; import messageBody.requestMsg.nr_Read_res; +import messageBody.requestMsg.nr_Stats_res; import messageBody.requestMsg.nr_write_res; import com.google.protobuf.GeneratedMessage; @@ -16,6 +17,7 @@ public class RegisterHandler initHandler(EMSGID.nm_connected.ordinal(), nm_Connected.class); initHandler(EMSGID.nr_connected_mem_back.ordinal(), nr_Connected_mem_back.class); initHandler(EMSGID.nr_read_res.ordinal(), nr_Read_res.class); + initHandler(EMSGID.nr_stats_res.ordinal(), nr_Stats_res.class); initHandler(EMSGID.nr_write_res.ordinal(), nr_write_res.class); } diff --git a/MemcachedClient/src/server/WebServerMain.java b/MemcachedClient/src/server/WebServerMain.java index 5a0b684..bf283f8 100644 --- a/MemcachedClient/src/server/WebServerMain.java +++ b/MemcachedClient/src/server/WebServerMain.java @@ -1,10 +1,7 @@ -package server; +package com.myself.server; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; -import java.util.Properties; import java.util.Random; import javax.xml.parsers.DocumentBuilder; @@ -18,9 +15,8 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import r_memcached.MemcachedMgr; -import server.ClientConfig; -import server.Server; +import com.myself.memcached.MemcachedMgr; + import common.RegisterHandler; public class WebServerMain { @@ -31,26 +27,17 @@ public class WebServerMain File f = new File(System.getProperty("user.dir")); String path = f.getPath() + File.separator + "bin" + File.separator; readClientsXML(path+"client.xml"); - try { - Properties properties = new Properties(); - properties.load(new FileInputStream(path+"config.properties")); - MemcachedMgr.nCopyNode = Integer.parseInt(properties.getProperty("replicasNum")); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } return true; } private static class bench extends Thread { private int runs; + @SuppressWarnings("unused") private int threadNum; private String object; private String[] keys; + @SuppressWarnings("unused") private int size; private int nums; private double rate; @@ -68,11 +55,9 @@ public class WebServerMain public void run() { - try - { + try { Thread.sleep(10); - } catch (InterruptedException e) - { + } catch (InterruptedException e){ // TODO Auto-generated catch block e.printStackTrace(); } @@ -87,22 +72,16 @@ public class WebServerMain public void randReadWrite(double scale) { Random randNum = new Random(); - for (int i = 0; i < runs; i++) - { - if (Math.random() Date: Wed, 13 Aug 2014 17:50:01 +0800 Subject: [PATCH 2/3] fix bug in stats --- MemcachedClient/src/server/MDecoder.java | 40 +-- MemcachedClient/src/server/MEncoder.java | 9 +- MemcachedClient/src/server/NetMsg.java | 15 +- MemcachedClient/src/server/WebServerMain.java | 226 ++++++------ MemcachedClient/src/server/webSession.java | 331 +++++++----------- 5 files changed, 279 insertions(+), 342 deletions(-) diff --git a/MemcachedClient/src/server/MDecoder.java b/MemcachedClient/src/server/MDecoder.java index 320004d..c3b83b2 100644 --- a/MemcachedClient/src/server/MDecoder.java +++ b/MemcachedClient/src/server/MDecoder.java @@ -1,35 +1,33 @@ -package server; +package com.myself.server; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.handler.codec.frame.FrameDecoder; -import server.NetMsg; - import common.EMSGID; public class MDecoder extends FrameDecoder { @Override protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception { - if (buffer.readableBytes() < 4) - { - return null;//(1) - } - int dataLength = buffer.getInt(buffer.readerIndex()); - if (buffer.readableBytes() < dataLength + 4) - { - return null;//(2) - } - - buffer.skipBytes(4);//(3) - int id = buffer.readInt(); - byte[] decoded = new byte[dataLength-4]; - - buffer.readBytes(decoded); - NetMsg msg = new NetMsg(decoded, id);//(4) - msg.setMsgID(EMSGID.values()[id]); - return msg; + if (buffer.readableBytes() < 8) { + return null;// (1) + } + int dataLength = buffer.getInt(buffer.readerIndex()); + if (buffer.readableBytes() < dataLength + 4) { + return null;// (2) + } + + buffer.skipBytes(4);// (3) + int id = buffer.readInt(); + int nodeRoute = buffer.readInt(); + byte[] decoded = new byte[dataLength - 8]; + + buffer.readBytes(decoded); + NetMsg msg = new NetMsg(decoded, id);// (4) + msg.setMsgID(EMSGID.values()[id]); + msg.setNodeRoute(nodeRoute); + return msg; } } \ No newline at end of file diff --git a/MemcachedClient/src/server/MEncoder.java b/MemcachedClient/src/server/MEncoder.java index 9aed908..ff54e4c 100644 --- a/MemcachedClient/src/server/MEncoder.java +++ b/MemcachedClient/src/server/MEncoder.java @@ -1,4 +1,4 @@ -package server; +package com.myself.server; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; @@ -6,23 +6,22 @@ import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; -import server.NetMsg; - public class MEncoder extends OneToOneEncoder { @Override protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { - if (!(msg instanceof NetMsg)) + if (!(msg instanceof NetMsg)) { return msg;//(1) } NetMsg res = (NetMsg)msg; byte[] data = res.getBytes(); - int dataLength = data.length+4; + int dataLength = data.length+8; ChannelBuffer buf = ChannelBuffers.dynamicBuffer();//(2) buf.writeInt(dataLength); buf.writeInt(res.msgID.ordinal()); + buf.writeInt(res.getNodeRoute()); buf.writeBytes(data); return buf;//(3) } diff --git a/MemcachedClient/src/server/NetMsg.java b/MemcachedClient/src/server/NetMsg.java index ecf32d5..93a6b87 100644 --- a/MemcachedClient/src/server/NetMsg.java +++ b/MemcachedClient/src/server/NetMsg.java @@ -1,7 +1,6 @@ -package server; +package com.myself.server; import com.google.protobuf.GeneratedMessage; import com.google.protobuf.MessageLite; -import server.NetMsg; import common.EMSGID; import common.MessageManager; @@ -10,11 +9,14 @@ public class NetMsg { EMSGID msgID; MessageLite messageLite; + int nodeRoute; private NetMsg(){}; public static NetMsg newMessage() { - return new NetMsg(); + NetMsg msg = new NetMsg(); + msg.setNodeRoute(0); + return msg; } NetMsg(byte[] decoded, int id) throws Exception @@ -49,5 +51,10 @@ public class NetMsg { this.messageLite = builder.build(); } - + public int getNodeRoute() { + return nodeRoute; + } + public void setNodeRoute(int nodeRoute) { + this.nodeRoute = nodeRoute; + } } diff --git a/MemcachedClient/src/server/WebServerMain.java b/MemcachedClient/src/server/WebServerMain.java index bf283f8..5188361 100644 --- a/MemcachedClient/src/server/WebServerMain.java +++ b/MemcachedClient/src/server/WebServerMain.java @@ -1,4 +1,5 @@ package com.myself.server; + import java.io.File; import java.io.IOException; import java.util.HashMap; @@ -9,6 +10,8 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.log4j.PropertyConfigurator; +import org.json.JSONException; +import org.json.JSONObject; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -18,20 +21,20 @@ import org.xml.sax.SAXException; import com.myself.memcached.MemcachedMgr; import common.RegisterHandler; -public class WebServerMain -{ - static HashMap m_mapMemcachedClient; - public static boolean initConfig() - { + +public class WebServerMain { + static HashMap m_mapMemcachedClient; + static int threadCount = 0; + + public static boolean initConfig() { m_mapMemcachedClient = new HashMap(); File f = new File(System.getProperty("user.dir")); String path = f.getPath() + File.separator + "bin" + File.separator; - readClientsXML(path+"client.xml"); + readClientsXML(path + "client.xml"); return true; - } - - private static class bench extends Thread - { + } + + private static class bench extends Thread { private int runs; @SuppressWarnings("unused") private int threadNum; @@ -42,8 +45,8 @@ public class WebServerMain private int nums; private double rate; - public bench(int runs,int nums, int threadNum, String object, String[] keys, double rate) - { + public bench(int runs, int nums, int threadNum, String object, + String[] keys, double rate) { this.runs = runs; this.threadNum = threadNum; this.object = object; @@ -53,11 +56,10 @@ public class WebServerMain this.rate = rate; } - public void run() - { - try { + public void run() { + try { Thread.sleep(10); - } catch (InterruptedException e){ + } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -66,131 +68,151 @@ public class WebServerMain time = System.nanoTime(); randReadWrite(rate); time = System.nanoTime() - time; - System.out.println(time/1000000000.0f); + System.err.println("cost: " + time / 1000000000.0f); + WebServerMain.threadCount --; } - - public void randReadWrite(double scale) - { + + public void randReadWrite(double scale) { Random randNum = new Random(); for (int i = 0; i < runs; i++) { - if (Math.random() recvQueue = new ConcurrentLinkedQueue(); Map MemcachedChannelMap = new ConcurrentHashMap(); Map RequestChannelMap = new ConcurrentHashMap(); static webSession session = null; + public Channel curChannel; public long totalTime = 0; - public long ticks =0; + public long ticks = 0; - //public static Logger log = LoggerUtil.getInstance(); + public static JSONArray results = new JSONArray(); + public static Map stats = new HashMap<>(); + + // public static Logger log = LoggerUtil.getInstance(); public static Logger log = Logger.getLogger(webSession.class.getName()); - - public static webSession getInstance() - { - if (session == null) - { + + public static webSession getInstance() { + if (session == null) { session = new webSession(); } return session; } - - public void start() - { - //DBSession.getInstance().start(); 数据库连接 + + public void start() { + // DBSession.getInstance().start(); 数据库连接 new Thread(session).start(); System.out.println("session start"); - } + } // 添加request连接 - public void addRequestChannel(Channel ch) - { + public void addRequestChannel(Channel ch) { RequestChannelMap.put(ch.getId(), ch); } + // 删除request连接 - public void removeRequestChannel(Channel ch) - { - RequestChannelMap.remove(ch.getId()); + public void removeRequestChannel(Channel ch) { + RequestChannelMap.remove(ch.getId()); } + // 获得request连接 - public Channel getRequestChannel(Integer id) - { + public Channel getRequestChannel(Integer id) { return RequestChannelMap.get(id); - } - + } + // 增加client连接 - public void addClientChannel(Integer num,Channel ch) - { + public void addClientChannel(Integer num, Channel ch) { MemcachedChannelMap.put(num, ch); } - public Channel getClientChannel(Integer id) - { + + public Channel getClientChannel(Integer id) { return MemcachedChannelMap.get(id); } + // 删掉client连接 @SuppressWarnings("rawtypes") - public void removeClientChannel(Channel ch) - { + public void removeClientChannel(Channel ch) { Iterator iter = MemcachedChannelMap.entrySet().iterator(); - while (iter.hasNext()) - { + while (iter.hasNext()) { Entry entry = (Entry) iter.next(); - if ((Channel)entry.getValue() == ch) - { - MemcachedChannelMap.remove((Integer)entry.getKey()); + if ((Channel) entry.getValue() == ch) { + MemcachedChannelMap.remove((Integer) entry.getKey()); break; } - } + } } - ////////////////////////////////////////////////////////// - public void run() - { - while(true) - { + + // //////////////////////////////////////////////////////// + public void run() { + while (true) { MessageEvent event = recvQueue.poll(); - while(event != null) - { + while (event != null) { handle(event); event = recvQueue.poll(); } - - try - { + + try { Thread.sleep(0); - } catch (InterruptedException e) - { + } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } - - - public int gethashMem(String key) - { - return Math.abs(key.hashCode()%MemcachedMgr.getInstance().getSize()); + + public int gethashMem(String key) { + return Math.abs(key.hashCode() % MemcachedMgr.getInstance().getSize()); } - - public void handle(MessageEvent e) - { - NetMsg msg = (NetMsg)e.getMessage(); - switch (msg.getMsgID()) - { - case nm_connected: - { + + public void handle(MessageEvent e) { + NetMsg msg = (NetMsg) e.getMessage(); + switch (msg.getMsgID()) { + case nm_connected: { nm_Connected msgBody = msg.getMessageLite(); - addClientChannel(msgBody.getNum(), e.getChannel()); - + addClientChannel(msgBody.getNum(), e.getChannel()); nm_Connected_web_back.Builder builder = nm_Connected_web_back.newBuilder(); - NetMsg send = NetMsg.newMessage(); send.setMessageLite(builder); - send.setMsgID(EMSGID.nm_connected_web_back); - + send.setMsgID(EMSGID.nm_connected_web_back); + sendMsg(e.getChannel(), send); } - break; - case nr_connected_mem_back: - { - nr_Connected_mem_back msgLite= msg.getMessageLite(); - addClientChannel(msgLite.getMemID(), e.getChannel()); + break; + case nr_connected_mem_back: { + nr_Connected_mem_back msgLite = msg.getMessageLite(); + addClientChannel(msgLite.getMemID(), e.getChannel()); } break; case nr_stats_res: { nr_Stats_res msgBody = msg.getMessageLite(); - System.out.println("stats:\n"+msgBody.getValue()); + stats.put(msg.getNodeRoute(), msgBody.getValue()); + //System.out.println("stats:\n" + msgBody.getValue()); } break; - case nr_read_res: - { + case nr_read_res: { nr_Read_res msgBody = msg.getMessageLite(); -// System.out.println("key:"+msgBody.getKey()+" value:"+msgBody.getValue()); - -// System.out.println(String.valueOf((System.nanoTime()-msgBody.getTime())/1000000.0)); -// log.log(Priority.INFO, String.valueOf((System.nanoTime()-msgBody.getTime())/1000000.0)); -// log.log(Level.INFO, String.valueOf((System.nanoTime()-msgBody.getTime())/1000000.0)); -// System.err.println((System.nanoTime()-msgBody.getTime())/1000000.0); -// if (ticks==0) -// { -// totalTime = System.currentTimeMillis(); -// } - -// totalTime += System.nanoTime()-msgBody.getTime(); -// ticks++; -// if (ticks == 1000) -// { -// System.out.println(totalTime/1000000000.0f); -// -// totalTime = 0; -// ticks = 0; -// } -// if (msgBody.getValue().isEmpty()) //读数据库 -// { -// DBMessage dbMsg=new DBMessage(); -// dbMsg.mode = DBMessage.mode_query; -// dbMsg.key = msgBody.getKey(); -// -// DBSession.getInstance().addDBMessage(dbMsg); -// } -// else -// { -// nc_ReadRes.Builder builder = nc_ReadRes.newBuilder(); -// builder.setKey(msgBody.getKey()); -// builder.setValue(msgBody.getValue()); -// -// NetMsg send = NetMsg.newMessage(); -// send.setMessageLite(builder); -// send.setMsgID(EMSGID.nc_read_res); -// -// //sendMsg(getRequestChannel(msgBody.getClientid()), send); -// } + Map readResult = new HashMap(); + readResult.put("type", "GET"); + readResult.put("node", ""+msg.getNodeRoute()); + readResult.put("key", msgBody.getKey()); + readResult.put("value", msgBody.getValue()); + results.put(readResult); + //System.out.println("key:"+msgBody.getKey()+" value:"+msgBody.getValue()); } - break; - case nr_write_res: - { + break; + case nr_write_res: { nr_write_res msgBody = msg.getMessageLite(); -// System.out.println("key:"+msgBody.getKey()+" value:"+msgBody.getValue()); - - //DBMessage dbMsg = new DBMessage(); //异步写数据库 - //dbMsg.mode = DBMessage.mode_set; - //dbMsg.key = msgBody.getKey(); - //dbMsg.value = msgBody.getValue(); - //DBSession.getInstance().addDBMessage(dbMsg); - - -// log.log(Level.INFO, String.valueOf((System.nanoTime()-msgBody.getTime())/1000000.0)); - //System.err.println(); - -// System.out.println(String.valueOf((System.nanoTime()-msgBody.getTime())/1000000.0)); -// -// if (ticks==0) -// { -// totalTime = System.currentTimeMillis(); -// } - -// totalTime += System.nanoTime()-msgBody.getTime(); -// ticks++; -// if (ticks == 1000) -// { -// System.out.println(totalTime/1000000000.0f); -// -// totalTime = 0; -// ticks = 0; -// } - -// nc_WriteRes.Builder builder = nc_WriteRes.newBuilder(); -// builder.setKey(msgBody.getKey()); -// builder.setValue(msgBody.getValue()); -// -// NetMsg send = NetMsg.newMessage(); -// send.setMessageLite(builder); -// send.setMsgID(EMSGID.nc_write_res); - - //sendMsg(getRequestChannel(msgBody.getClientid()), send); + Map readResult = new HashMap(); + readResult.put("type", "SET"); + readResult.put("node", ""+msg.getNodeRoute()); + readResult.put("key", msgBody.getKey()); + readResult.put("value", msgBody.getValue()); + results.put(readResult); + //System.out.println("key:"+msgBody.getKey()+" value:"+msgBody.getValue()); } - break; + break; default: System.err.println(msg.getMsgID().toString()); break; } - //log.log(Level.INFO, msg.getMsgID().toString()); } - public void addSession(MessageEvent e) - { + + public void addSession(MessageEvent e) { recvQueue.offer(e); - } - public boolean sendAllMsg(Integer hash, NetMsg msg) - { - for (int i = 0; i < MemcachedMgr.nCopyNode; i++) - { - Channel eChannel = getClientChannel(hash+i); - if (eChannel != null) - { + } + + public boolean sendAllMsg(Integer hash, NetMsg msg) { + for (int i = 0; i < MemcachedMgr.nCopyNode; i++) { + Channel eChannel = getClientChannel(hash + i); + if (eChannel != null) { sendMsg(eChannel, msg); return false; - } - } - return true; - } - - public boolean allSendMsg2Memcached(NetMsg msg){ - for (int i = 0; i < MemcachedMgr.nCopyNode; i++) { - Channel eChannel = getClientChannel(i); - if (eChannel != null) { - sendMsg(eChannel, msg); } } return true; } - - public boolean randSendMsg2Memcached(Integer hash, NetMsg msg) - { + + public boolean allSendMsg2Memcached(NetMsg msg) { + int size = MemcachedChannelMap.size(); + for (int i = 0; i < size; i++) { + Channel eChannel = getClientChannel(i); + if (eChannel != null) { + sendMsg(eChannel, msg); + } + } + return true; + } + + public boolean randSendMsg2Memcached(Integer hash, NetMsg msg) { Random random = new Random(); int index = random.nextInt(MemcachedMgr.nCopyNode); - for (int i = 0; i < MemcachedMgr.nCopyNode; i++) - { - int num = (hash+i+index+MemcachedMgr.getInstance().getSize())%MemcachedMgr.getInstance().getSize(); + for (int i = 0; i < MemcachedMgr.nCopyNode; i++) { + int num = (hash + i + index + MemcachedMgr.getInstance().getSize()) + % MemcachedMgr.getInstance().getSize(); Channel eChannel = getClientChannel(num); - if (eChannel != null) - { + if (eChannel != null) { sendMsg(eChannel, msg); return true; - } + } } + System.err.println("SendMsg wrong : randSendMsg2Memcached in webSession line 174"); + System.exit(-1); return false; } - - public boolean SendMsg2Leader(Integer hash, NetMsg msg) - { - for (int i = 0; i < MemcachedMgr.nCopyNode; i++) - { - int index = (hash+i+MemcachedMgr.getInstance().getSize()) - %MemcachedMgr.getInstance().getSize(); + + public boolean SendMsg2Leader(Integer hash, NetMsg msg) { + for (int i = 0; i < MemcachedMgr.nCopyNode; i++) { + int index = (hash + i + MemcachedMgr.getInstance().getSize()) + % MemcachedMgr.getInstance().getSize(); Channel eChannel = getClientChannel(index); - if (eChannel != null) - { + if (eChannel != null) { sendMsg(eChannel, msg); return true; - } + } } return false; } - - public void sendMsg(Channel ch, NetMsg msg) - { - try - { + + public void sendMsg(Channel ch, NetMsg msg) { + try { ch.write(msg); - } - catch (Throwable e) - { - //log.log(Level.WARNING, "send msg fail"); + } catch (Throwable e) { + // log.log(Level.WARNING, "send msg fail"); } } @@ -326,9 +239,8 @@ public class webSession implements Runnable allSendMsg2Memcached(msg); return true; } - - public boolean get(String key) - { + + public boolean get(String key) { nr_Read.Builder builder = nr_Read.newBuilder(); builder.setKey(key); builder.setTime(System.nanoTime()); @@ -338,9 +250,8 @@ public class webSession implements Runnable randSendMsg2Memcached(key.hashCode(), msg); return true; } - - public boolean set(String key, String value) - { + + public boolean set(String key, String value) { nr_write.Builder builder = nr_write.newBuilder(); builder.setKey(key); builder.setValue(value); From 4f1b963fcf9a0046d0be4dcbc8901cba5f8a29df Mon Sep 17 00:00:00 2001 From: lyr90329 Date: Wed, 13 Aug 2014 17:56:39 +0800 Subject: [PATCH 3/3] bug --- MemcachedClient/src/server/WebServerMain.java | 33 ++++++++++++------- MemcachedClient/src/server/webSession.java | 2 +- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/MemcachedClient/src/server/WebServerMain.java b/MemcachedClient/src/server/WebServerMain.java index 5188361..28664bf 100644 --- a/MemcachedClient/src/server/WebServerMain.java +++ b/MemcachedClient/src/server/WebServerMain.java @@ -10,6 +10,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.log4j.PropertyConfigurator; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.w3c.dom.Document; @@ -90,8 +91,14 @@ public class WebServerMain { } } } - + public static void main(String[] args) { + for (int i =0; i< 10; i++){ + WebServerMain.run(args); + } + } + + public static void run(String[] args) { PropertyConfigurator.configure(System.getProperty("user.dir") + "/bin/log4j.properties");// 加载.properties文件 initConfig(); @@ -138,7 +145,7 @@ public class WebServerMain { } } - System.out.println(webSession.results.length()); + try { System.out.println(webSession.results.get(0)); } catch (JSONException e1) { @@ -146,21 +153,25 @@ public class WebServerMain { } webSession.getInstance().stats(); - while (webSession.stats.size() != 4){ + while (webSession.stats.size() != 4 || webSession.results.length() < 3000){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } - try { - JSONObject jStats = new JSONObject(webSession.stats.get(1)); - System.out.println(jStats); - System.out.println(jStats.get("cmd_get")); - System.out.println(jStats.get("cmd_set")); - } catch (JSONException e) { - e.printStackTrace(); - } + System.out.println(webSession.results.length()); +// try { +// JSONObject jStats = new JSONObject(webSession.stats.get(2)); +// System.out.println(jStats); +// System.out.println(jStats.get("cmd_get")); +// System.out.println(jStats.get("cmd_set")); +// } catch (JSONException e) { +// e.printStackTrace(); +// } + requestServer.stop(); + //webSession.session = null; + webSession.results = new JSONArray(); } // 读取memcached client配置 diff --git a/MemcachedClient/src/server/webSession.java b/MemcachedClient/src/server/webSession.java index 217fc5d..fedfe4f 100644 --- a/MemcachedClient/src/server/webSession.java +++ b/MemcachedClient/src/server/webSession.java @@ -29,7 +29,7 @@ public class webSession implements Runnable { ConcurrentLinkedQueue recvQueue = new ConcurrentLinkedQueue(); Map MemcachedChannelMap = new ConcurrentHashMap(); Map RequestChannelMap = new ConcurrentHashMap(); - static webSession session = null; + public static webSession session = null; public Channel curChannel; public long totalTime = 0;