我有一个运行apache2,php和MySQL的centos 6服务器。 Apacheconfiguration有几个虚拟站点,因为服务器运行六个网站,六个站点中的三个使用MySQL,另外三个不使用。
最近我发现,使用MySQL崩溃的网站 – 报告错误“无法连接到SQL数据库..”
查看日志后,看起来有多个Apache运行的实例吃掉了我所有的内存 – 这导致服务器为了阻止服务器死亡而终止MySQL进程,并且不久之后它将恢复(偶尔我必须修复一些表格)
为了试图控制这种情况,我把max_connections降到了100,但是这并没有帮助
现在我不知道,如果我需要更多的内存(安装1GB),或者如果我被拒绝服务攻击。 诚实地说,我们确实希望服务器有大量的stream量,但是我怎么知道一个IP是否连续打到这个盒子?
如果有帮助,我在下面的“正常操作”中粘贴了一些输出
free -m total used free shared buffers cached Mem: 992 771 221 0 15 87 -/+ buffers/cache: 668 323 Swap: 976 39 937 ps aux | grep apache apache 17148 0.1 3.4 430836 35036 ? S 06:34 0:10 /usr/sbin/httpd apache 17150 0.1 3.3 430592 34560 ? S 06:34 0:12 /usr/sbin/httpd apache 17157 0.1 3.3 333192 33896 ? S 06:34 0:13 /usr/sbin/httpd apache 17164 0.1 3.3 333712 33984 ? S 06:34 0:09 /usr/sbin/httpd apache 17167 0.1 3.4 430576 34584 ? S 06:34 0:12 /usr/sbin/httpd apache 17168 0.1 3.3 430064 34312 ? S 06:34 0:11 /usr/sbin/httpd apache 17176 0.1 3.3 430564 34560 ? S 06:34 0:11 /usr/sbin/httpd apache 17184 0.1 3.4 432124 35500 ? S 06:34 0:08 /usr/sbin/httpd apache 17186 0.1 3.3 430088 34384 ? S 06:34 0:14 /usr/sbin/httpd apache 17188 0.1 3.3 333464 34028 ? S 06:34 0:13 /usr/sbin/httpd apache 17190 0.1 3.4 430548 34616 ? S 06:34 0:08 /usr/sbin/httpd apache 17193 0.1 3.3 333372 33548 ? S 06:34 0:12 /usr/sbin/httpd apache 17195 0.1 3.4 333716 34672 ? S 06:34 0:11 /usr/sbin/httpd apache 17225 0.1 3.3 430044 33584 ? S 06:35 0:10 /usr/sbin/httpd apache 17239 0.1 3.4 430568 34796 ? S 06:35 0:11 /usr/sbin/httpd apache 17241 0.1 3.3 430480 34284 ? S 06:35 0:11 /usr/sbin/httpd apache 17290 0.1 3.4 430948 34824 ? S 06:35 0:10 /usr/sbin/httpd apache 21095 0.1 3.1 331300 32344 ? S 08:15 0:01 /usr/sbin/httpd apache 30858 0.1 3.2 430148 33304 ? S Aug04 0:49 /usr/sbin/httpd apache 31996 0.1 3.2 430168 33480 ? S Aug04 0:48 /usr/sbin/httpd
看起来你需要更多的内存。 您也可以减lessPHP的最大数量的HTTPd进程或最大内存参数。
我同意@PauRudnitskiy,但是在为这个问题抛出更多的内存之前,你应该考虑一些事情。
就像Paul所说的那样,看一下你的apacheconfiguration,看看你允许的最大数量的子和连接。 如果最大的孩子也是正在运行的进程的数量,那么可能是你有一个问题。
通过使用以下命令来检查您的系统负载是什么
uptime
它会看起来像这样
02:22:35最多4:07,4位用户,平均负载:0.10,0.08,0.06
如果“ 平均值 ”之后的数字看起来很大,那么表明你正在受到攻击。 简单地把最大的数字除以你拥有的CPU核心的数量,如果结果大于1,那么这意味着你的CPU已满。
最后只是添加我所显示的是你真的看到,如果你在交通高峰或额外负荷。 你需要看看你的apache日志来试试,看看你是否正常地进行某种攻击,这是通过同一个ip地址向页面发出大量请求,而其他普通用户不会这么做的。