У меня есть сервер centos 6 с apache2, php и MySQL. В конфигурации apache есть несколько виртуальных сайтов, так как на сервере работают шесть сайтов, три из шести сайтов используют MySQL, а три других - нет.
Недавно я обнаружил, что сайты, использующие MySQL, вылетают - сообщают об ошибке «невозможно подключиться к базе данных sql ..»
После просмотра журналов, похоже, что есть несколько запущенных экземпляров apache, которые съедают всю мою память - это заставляет сервер убивать процесс MySQL, чтобы не дать серверу умереть, а через несколько секунд он восстанавливается (в некоторых случаях Мне нужно отремонтировать некоторые столы)
Чтобы попытаться контролировать ситуацию, я снизил max_connections до 100, но это не помогло.
Прямо сейчас я не уверен, нужно ли мне больше памяти (установлен 1 ГБ) или я подвергся DoS-атаке. Честно говоря, мы ожидаем больших объемов трафика на сервер, но как я могу узнать, постоянно ли попадает в поле один 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
Похоже, вам нужно больше оперативной памяти. Вы также можете уменьшить максимальное количество процессов HTTPd или максимальный параметр памяти для PHP.
Я согласен с @PauRudnitskiy, но всего несколько вещей, на которые вы должны обратить внимание, прежде чем просто уделять больше внимания проблеме.
Как сказал Пол, взгляните на свою конфигурацию apache и посмотрите максимальное количество детей и подключений, которые вам разрешено иметь. Если максимальное количество детей - это также количество запущенных процессов, это может быть у вас проблема.
Также проверьте, какова нагрузка на вашу систему, используя следующую команду
uptime
Это будет выглядеть примерно так
02:22:35 до 4:07, 4 пользователя, средняя нагрузка: 0,10, 0,08, 0,06
если числа после "средняя нагрузка"Тогда посмотрите крупно, чтобы показать, что вы атакованы. Просто разделите наибольшее число на количество ядер процессора, которое у вас есть. Если результат больше 1, это означает, что ваш процессор заполнен.
Наконец, просто чтобы добавить то, что я вам показываю, на самом деле, чтобы увидеть, находитесь ли вы под скачком трафика или под дополнительной нагрузкой. Вам нужно будет посмотреть свои журналы apache, чтобы попытаться увидеть, если вы подвергаетесь какой-либо атаке, обычно это видно по тому же IP-адресу, который отправляет множество запросов на страницу, и другие вещи, которые обычные пользователи не будут делать.