gpt4 book ai didi

sockets - WhatsApp 如何实现每台服务器 200 万个连接?

转载 作者:行者123 更新时间:2023-12-03 00:06:10 25 4
gpt4 key购买 nike

在 Ubuntu 上,可以打开的最大套接字数量似乎受以下控制:

$ cat /proc/sys/net/ipv4/tcp_max_orphans
262144

根据 Rick Reed(来自 WhatsApp)的一次演示,这些人使用 FreeBSD 和 ErLang 在“单个服务器”上实现了高达 200 万个并发连接。我的理解是我们总是需要内核的一些支持。是的,看起来像是对 FreeBSD 进行了调整,得到了这个 capability :

hw.machine: amd64
hw.model: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz
hw.ncpu: 24
hw.physmem: 103062118400
hw.usermem: 100556451840

kb@c123$ uname -rps
FreeBSD 8.2-STABLE amd64

jkb@c123$ cat /boot/loader.conf.local
kern.ipc.maxsockets=2400000
kern.maxfiles=3000000
kern.maxfilesperproc=2700000

那么,考虑到我们有足够的内存,看起来可以调整内核以支持如此多的物理连接,对吗?如果是的话,那么它看起来很简单,那么它有什么炒作呢?或者我错过了什么?

谢谢。

最佳答案

如果你有足够的 RAM,在 Linux 上处理 1M 或更多的连接并不是太难。 These guys使用常规 CentOS 内核并进行一些 sysctl 调整,在单个机器上处理了 1000 万个 Java 应用程序连接:

sysctl -w fs.file-max=12000500
sysctl -w fs.nr_open=20000500
ulimit -n 20000000
sysctl -w net.ipv4.tcp_mem='10000000 10000000 10000000'
sysctl -w net.ipv4.tcp_rmem='1024 4096 16384'
sysctl -w net.ipv4.tcp_wmem='1024 4096 16384'
sysctl -w net.core.rmem_max=16384
sysctl -w net.core.wmem_max=16384

他们还平衡了网络适配器的/proc/irq/并添加了一些调整,以便 JVM 更好地处理大页面:

sysctl -w vm.nr_hugepages=30720

拥有两个 6 核 CPU,负载率为 57% served 2013 年超过 12M 连接达到 1Gbps。

但是你需要大量的 RAM。上述测试是在具有 96GB RAM 的服务器上进行的,其中 36GB 被内核用于 12M 套接字的缓冲区。

要使用类似的设置提供 1M 连接,您需要一台至少具有 8GB RAM 的服务器,其中 3-4GB 仅用于套接字缓冲区。

关于sockets - WhatsApp 如何实现每台服务器 200 万个连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22090229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com