gpt4 book ai didi

linux - 如何在 CentOS 上扩展 ejabberd 服务器机器以处理 200 K 连接?

转载 作者:太空狗 更新时间:2023-10-29 11:17:58 25 4
gpt4 key购买 nike

我正在开发一个相当不错的 ejabberd 实例,它有 40 个核心 CPU 机器和 160 GB RAM。

问题是我无法扩展到 200 K 并行连接。

sysctl配置如下:

net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
#http://linux-ip.net/html/ether-arp.html#ether-arp-flux
net.ipv4.conf.all.arp_filter = 1
kernel.exec-shield=1
kernel.randomize_va_space=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.ip_local_port_range = 12000 65535
fs.nr_open = 20000500


fs.file-max = 1000000
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000

net.ipv4.tcp_synack_retries = 3

net.core.somaxconn = 10000

/etc/security/limits.conf 文件条目如下:

*               soft    core            900000
* hard rss 900000
* soft nofile 900000
* hard nofile 900000
* soft nproc 900000
* hard nproc 900000

当服务器达到大约 112 K 时,机器开始失去连接。

112 K 左右发生的事情

  1. CPU 使用率上升到 200 ~ 300 %(但这是通常的峰值)

40 Core machine m4.10xlarge

背景——当一切正常时,CPU 使用率飙升至 80%,如下图所示(只有两个 CPU 在进行实际工作)

enter image description here

  1. 我无法在机器上工作。我正在使用 top 和 ss 命令来查看服务器上发生了什么。机器此时停止响应,连接开始断开。

可取之处在于连接不会突然中断,而是按照连接的速率下降。

我正在使用 TSUNG 生成负载。有 4 个负载生成器盒命中 4 个不同的 ip,内部只映射到一台机器。

非常欢迎任何建议和意见。

最佳答案

作为第一个电话,您需要确定您的案例中的瓶颈是什么:

  • 中央处理器
  • 内存
  • 系统限制(打开套接字、打开文件)
  • 应用架构

如果可能,将资源跟踪应用程序添加到您的节点,例如recon .它将允许您检查进程队列的长度、内存碎片等。在我们的生产系统中,由于透明大页面,Erlang VM 消耗的内存量在系统报告时与 Erlang VM 本身报告时不同(系统已虚拟化)。在使用系统工具检查节点时,可能存在其他可能不明显的问题。

所以我建议:

  1. 确定具有最长队列大小的进程 - 它们将导致系统变慢,因为 Erlang VM 在收到消息时需要扫描进程的整个收件箱

  2. 确定分配内存量最大的进程

  3. 判断Erlang自己认为分配了多少内存

此外,如果您添加用于启动 Erlang VM 的参数,那将会很好。

添加

忘记提及 WhatsApp 对其 Erlang 节点所做的调整以处理数十万个同时连接可能值得一提:

The WhatsApp Architecture Facebook Bought For $19 Billion

关于linux - 如何在 CentOS 上扩展 ejabberd 服务器机器以处理 200 K 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36184551/

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