2016-10-28 100 views
0

我有一個使用websocket的應用程序。到目前爲止,經過嚴格的嘗試,我能夠建立65000個連接,但我的資源仍然基本上是免費的。我如何增加連接數量。增加套接字連接數量

的後端代碼是用Java編寫Vertx Verticle

public class HttpVerticle extends AbstractVerticle { 
    static int connectionCount = 0; 
    @Override 
    public void start() throws Exception { 
     HttpServer server = vertx.createHttpServer(); 
     server.websocketHandler(serverWebSocket -> { 
      System.out.println("Connection established: " + (++connectionCount)); 
      serverWebSocket.closeHandler(handler -> { 
       System.out.println("Connection Closed"); 
      }); 
     }); 
     server.listen(8888); 
    } 
} 

主要應用:

public class Main { 
    public static void main(String[] args) { 
     System.out.println("server started @ 8080"); 
     Vertx vertx = Vertx.vertx(); 
     vertx.deployVerticle(new HttpVerticle()); 
    } 
} 

我的系統配置:

Dell latitude 
16Gb ram 
intel core i7 

內存信息,而65000個建立連接:

16313976 total 
6009728 used 
10283896 free 

我可以用這種配置進行的最大連接數是多少,以及增加這個連接數的方法是什麼?我發現大內存仍然是免費的,那麼我如何增加這種連接呢?

而我的系統設置

的/etc/sysctl.conf

net.core.rmem_max = 33554432 
net.core.wmem_max = 33554432 
net.ipv4.tcp_rmem = 4096 16384 33554432 
net.ipv4.tcp_wmem = 4096 16384 33554432 
net.ipv4.tcp_mem = 786432 1048576 26777216 
net.ipv4.tcp_max_tw_buckets = 360000 
net.core.netdev_max_backlog = 2500 
vm.min_free_kbytes = 65536 
vm.swappiness = 0 
net.ipv4.ip_local_port_range = 1024 65535 

在/etc/security/limits.conf

myusername hard nofile 1000000 
root soft nofile 1000000 
root hard nofile 1000000 

回答

1

您有臨時端口有問題,通常你將會用盡套接字,您將達到幾乎64k的連接。爲了解決這個問題,你可能會在不同的端口啓動同一臺服務器,並將每個監聽端口的連接分配到每個接近50000的端口。

這是C10M爲Go創建基準時使用的技巧。此外,文章確實解釋了限制以及他們如何解決這個問題。雖然它是用Go編寫的,但它可以應用於任何語言,並且一定會適用於Vert.x

+0

非常感謝。但我做了一個方法,我在端口8000上啓動了一個nginx服務器。並在8001,8002,8003中創建了3個不同的服務器。這個想法是使用nginx負載均衡器將連接分配給這三臺服務器。但是當它嘗試這種方法時,nginx負載均衡器本身只需要65k連接。任何想法我怎麼能解決這個問題? – CuriousMind

+0

我認爲這是同樣的問題,你有3臺服務器,但是ngnix是一臺服務器,所以一旦它達到〜64k連接,它將耗盡臨時端口,你仍然需要啓動幾臺ngnix服務器或者將其連接到vert.x服務器直接 –

+0

這些問題如何正常解決?我猜想使用websocket的應用程序不僅限於65k連接? – CuriousMind