2015-07-03 76 views
0

我使用Zaphoyd Websocketpp到创造需要接受在CentOS非常高并发连接(C1M至少)的WebSocket服务器时被打死。 但是,当连接数达到63k时,服务器进程总是被内核杀死。 我在dmesg的看到这条消息:的WebSocket服务器接收多个连接

Out of memory: Kill process 5420 (echo_server) score 382 or sacrifice child 
Killed process 5420, UID 10545, (echo_server) total-vm:1488192kB, anon-rss:1467524kB, file-rss:32kB 

我不认为内核就会杀死只消耗大约1.5GB的过程。所以我创建了一个简单的程序来分配内存并执行一些读/写操作。这个程序没有被内核杀死。内存使用量达到3.2GB时,它只会收到bad_alloc错误。

我也查了一些其他的参数,但是没有发现任何可疑的:

$ ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 29712 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1000000 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 10240 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 29712 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

$ cat /proc/sys/fs/nr_open 
10485760 
$ cat /proc/sys/fs/file-max 
1280000 
$ cat /proc/sys/fs/file-nr 
1536 0 1280000 

在这个任何人的帮助?

+0

63K TCP连接到同一台机器? – vtortola

+0

是的,约64K TCP连接到同一台机器。但是这个进程被杀死的不是客户端,而是服务器。 – avhacker

回答

1

从同一台机器上创建的那些连接?

What is the theoretical maximum number of open TCP connections that a modern Linux box can have

如果客户端在同一 目的地在同一端口的连接数,然后是三个那些字段将是相同的 - 只有 source_port变化来区分不同的连接。端口 是16位数字,任何给定的 客户端可以具有任何给定的主机端口的连接,因此最大数量为64K。

+0

连接总数小于63K,所以它不是64K的限制。我也尝试通过不同的主机建立连接。结果仍然是一样的。 – avhacker

相关问题