networking服务器停止接受新的连接

我每天晚上都在Centos 5networking服务器上遇到麻烦,当时雅虎抓取了网站并在这个过程中closures了网站。 我已经监视了服务器,当它在雅虎洪水下,内存永远不会耗尽,所以它从来没有达到交换分区。 负载似乎不会超过1.5。 我不认为有一个问题,除非apache刚刚停止接受传入的连接一段时间。

我怀疑这个问题与服务器不接受任何新的连接有关,但对我来说这是一个阴暗的领域。

有人能帮我弄清楚这里发生了什么,或者指引我学习一些材料。

编辑:

我在每20秒运行一次的while循环中运行由Glenn Kelley提供的netstat命令。 当我注意到我一次获得超过5个ESTABLISHED连接(我的规范)时,CLOSE_WAIT数字会开始攀升到40-60左右。此时,我在while循环中添加了“mysqladmin proc stat”,并注意到我有一个当时正在运行mysqldump的备份脚本。

显然,mysqldumplocking了数据库中的所有表,防止写入发生。 由于这一点以及巧合定时的雅虎爬网(每分钟40页),服务器在达到MaxClients后最终会停止接受Apache的传入请求。

我现在正在考虑使用MySQL复制来允许非locking备份或find更好的时间来运行我的备份。 使用mysqldump和–skip-lock-tables不是我的select,我不能使用mysqlhotcopy,因为我有一些InnoDB表。

有几件事你可以在这里做。

  1. 您是否微调了服务器以允许来自1个IP的x个连接?
  2. 安装mod_evasive应该会有很大的帮助。
  3. 运行netstat查看是否有其他stream量正在冲击系统:

netstat -ntu | awk'{print $ 5}'| 切-d:-f1 | sorting| uniq -c | 分类

该命令将列出每个ip到服务器,以及它有多less连接。

  1. 编辑使用你最喜欢的编辑器(FIRST BACKUP PLEASE)这个文件/usr/local/apache/conf/httpd.conf

改变主要选项:(根据您的喜好和需要调整)

MaxKeepAliveRequests 50(100)KeepAliveTimeout 60(30)

其他编辑可能会对以下每个variables有所帮助Timeout KeepAliv MinSpareServers MaxSpareServers MaxClients

改变1一次 – 这样你知道你的变化,如果这个或那个伤害或帮助。

添加更多的Anti-DDOS工具也可能有帮助。 来自InetBase的脚本可能会有帮助 – 取决于您的使用情况。

http://www.inetbase.com/scripts/ddos/

最后 – 一个简单的反向代理可能真的有所作为。 其中之一就是NGINX

你有没有使用控制面板? 如果是的话 – 知道哪一个 – 可以帮助社区帮助你多一点…

以前见过这样的事情

我的猜测是,你有一个错误的链接,永远不会完成..所以进程等待..等待和等待..下一个查询命中相同的链接..并等待,等待和等待..

基本上它一直这样做,直到所有的进程正在使用..你可以接受了:(

检查记分板(在重新启动服务器之前查看哪些URL卡住了)

还要确保启用mysql日志logging,并检查是否没有达到max_connections(假设你的web应用程序正在使用mysql)。

如果您提供了有关如何configurationWeb服务器的详细信息,连接数,yahho连接数,平均和最大持续时间,这将会很有帮助。

听起来像你有一个错误的组合为maxClients和MaxKeepAliveRequests / KeepAliveTimeout