diff --git a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java
index f4113b4edbb88f0c3b8fc9341f780d4b21537d16..ba586b002b01a207d60027e7b30070293ee6e829 100644
--- a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java
+++ b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java
@@ -11,10 +11,25 @@ import org.apache.dubbo.rpc.listener.CallbackListener;
  *
  */
 public class CallbackListenerImpl implements CallbackListener {
+    static long memory_large = 3;
+    static long memory_medium = 2;
+    static long memory_small = 1;
 
     @Override
     public void receiveServerMsg(String msg) {
         System.out.println("receive msg from server :" + msg);
+        String[] rcvmsglist = msg.split(",");
+        if (rcvmsglist[0].equals("small")) memory_small = Long.parseLong(rcvmsglist[1]);
+        else if (rcvmsglist[0].equals("medium")) memory_medium = Long.parseLong(rcvmsglist[1]);
+        else memory_large = Long.parseLong(rcvmsglist[1]);
+
+        long memory_sum = memory_large + memory_medium + memory_small;
+
+        System.out.println(msg + " : " + memory_large + ',' + memory_medium + ',' + memory_small + "  |  " + memory_sum);
+
+        UserLoadBalance.weight_large = 6.0 * memory_large / memory_sum;
+        UserLoadBalance.weight_medium = 6.0 * memory_medium / memory_sum;
+        UserLoadBalance.weight_small = 6.0 * memory_small / memory_sum;
     }
 
 }
diff --git a/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java b/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java
index a184f07c72549f9fa1afd4a0cecb16a6cf485d82..0cc84ad8f0f66f12fc4428adb7f7d63f944bac11 100644
--- a/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java
+++ b/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java
@@ -19,11 +19,17 @@ import java.util.concurrent.ThreadLocalRandom;
  */
 public class UserLoadBalance implements LoadBalance {
 
+    static double weight_large = 3.0;
+    static double weight_medium = 2.0;
+    static double weight_small = 1.0;
+
     @Override
     public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
-        int[] invoker_list = {0, 1, 1, 2, 2, 2};
-        int id = ThreadLocalRandom.current().nextInt(6);
-        //System.out.println("Send one request to " + invoker_list[id]);
-        return invokers.get(invoker_list[id]);
+        double thread = ThreadLocalRandom.current().nextDouble(6.0);
+        int id = 2;
+        if (thread < weight_small) id = 0;
+        else if (thread < weight_small + weight_medium) id = 1;
+        System.out.println(id + " | " + weight_large + ',' + weight_medium + ',' + weight_small);
+        return invokers.get(id);
     }
 }
diff --git a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java
index fc9a2a9485f904e25222f5d820c826c537ebc1c3..4a0aa43953ee8bc28d462b0d1b1c35400b152b9a 100644
--- a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java
+++ b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java
@@ -25,7 +25,8 @@ public class CallbackServiceImpl implements CallbackService {
                 if (!listeners.isEmpty()) {
                     for (Map.Entry<String, CallbackListener> entry : listeners.entrySet()) {
                         try {
-                            entry.getValue().receiveServerMsg(System.getProperty("quota") + " " + new Date().toString());
+                            //entry.getValue().receiveServerMsg(System.getProperty("quota") + " " + new Date().toString());
+                            entry.getValue().receiveServerMsg(System.getProperty("quota") + "," + Runtime.getRuntime().freeMemory());
                         } catch (Throwable t1) {
                             listeners.remove(entry.getKey());
                         }
diff --git a/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java b/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java
index 0447ef57897d5ce23e18c09ab720f75d49848a31..5d60f743e59ce6fb9f351392d9c13ae6b9237287 100644
--- a/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java
+++ b/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java
@@ -20,6 +20,7 @@ public class TestRequestLimiter implements RequestLimiter {
      */
     @Override
     public boolean tryAcquire(Request request, int activeTaskCount) {
+        if (activeTaskCount > 2000) return false;
         return true;
     }