我一直在阅读以下文章:
- http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1
- Linux 上的 TCP 连接数超过 65536
想知道关于调整 Linux 以处理 100 万个 TCP 连接,我是否还需要了解其他信息?到目前为止,我已将其缩小到以下几点:
- 配置内核以支持系统范围内的 1mil 连接(sysctl.conf)
- 为特定用户配置 100 万个连接(/etc/security/limits.conf)
- 配置 tcp 堆栈内存设置(sysctl.conf?)
我还需要配置什么吗?(这是针对 EC2 大型 64 位服务器的)
-编辑-
它不是 Apache,而是基于 libev 的自定义 C 服务器(仅供参考)。它可以很好地扩展到 100 万,我担心的是内核 :)
答案1
您已配置了大部分我本应设置(并且必须设置)的可调参数。当我们像这样扩展时,我发现的一件事是,您的环境总会有一些其他人没有提到的特殊之处。要抓住这一点,您需要确保您正在观察并提醒:
- 通过系统日志获取错误信息
- 程序遇到的错误,如 socket() 失败等
- 网络缓冲区可用性(通过 SNMP 或 netstat cron)
- 内核表限制(再次通过 SNMP 或 /proc 文件解析 cron)
- 频繁监控(每 1-10 毫秒进行一次非常轻量级的轮询,我们使用 OpenNMS 来轻松完成此操作,因为 OpenNMS 非常棒)。
您可能遇到的另一件事是 HZ 值问题。在我们的 FreeBSD 系统上,我们增加了该值。我正在调查 Linux 上的另一个问题,遇到了一个根据 HZ 值清理套接字队列的情况:
关于评论,我不认为 FreeBSD 在这方面会更好,它们都需要大量的调整才能工作。我们使用 FreeBSD 是因为盒子直接连接到互联网,而 OpenBGPD 是目前最好的开源 BGP 实现。
答案2
我在配置每个用户的设置时遇到了问题,我不断更改 limits.conf 中的文件数量,但之后却无法让我再次登录,我不得不终止 ec2 实例。后来我发现,1024*1024 是 limits.conf 中可以输入的最大值,再多的话就会出错:
echo "* soft nofile 1048576" >> /etc/security/limits.conf
echo "* hard nofile 1048576" >> /etc/security/limits.conf
除此之外,以及 mochiweb 博客链接中提到的 sysctl 的附加功能,我还需要做什么吗?
非常感谢大家。我真的很想看看我是否可以推动这个服务器处理 100 万个连接...
答案3
这取决于服务器的规格以及它提供的内容类型。如果它提供活动内容和媒体,那么可能根本无法实现(同时实现对吧?)。数据库和小型网站应该没问题。在 apache 配置中,尝试让它启动许多工作线程/子线程。在盒子本身中,只需测试它以查看 Apache 是否可以处理它。如果 apache 可以但盒子不能,也许其他人可以帮忙。抱歉。祝你好运。
是的,抱歉,没有仔细阅读。