Назад | Перейти на главную страницу

Apache и использование памяти

Я арендую сервер Gentoo с обычным стеком LAMP (prefork Apache MPM) + suPHP.

Время от времени моему серверу не хватает памяти и он замедляется до обхода (отвечает на эхо-запросы, но войти в систему практически невозможно, а нажатие клавиш, отправленное через SSH, может занять несколько минут, чтобы отобразить ответ, не говоря уже о обработке). В системных журналах тоже много чего оom_killer.

Это то, что я вижу в top в один из этих моментов:

top - 16:45:05 up 22 days,  8:08,  3 users,  load average: 104.26, 103.87, 93.3
Tasks: 393 total,   1 running, 388 sleeping,   0 stopped,   4 zombie
Cpu(s):  4.6%us,  9.3%sy,  0.8%ni,  0.0%id, 84.8%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:   2042128k total,  1634392k used,   407736k free,     1792k buffers
Swap:        0k total,        0k used,        0k free,    27724k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3125 apache    20   0  288m 105m 1368 S    0  5.3   0:01.00 apache2
 2886 apache    20   0  285m 102m 1368 S    0  5.1   0:02.44 apache2
 3048 apache    20   0  279m  96m 1192 D    0  4.8   0:01.58 apache2
 3037 apache    20   0  278m  95m 1076 S    0  4.8   0:02.23 apache2
 3014 apache    20   0  278m  94m 1204 D    0  4.8   0:01.81 apache2
 2859 apache    20   0  274m  91m 1368 S    0  4.6   0:00.63 apache2
 3016 apache    20   0  269m  86m 1368 S    0  4.3   0:01.49 apache2
 2887 apache    20   0  269m  86m 1192 D    0  4.3   0:01.06 apache2
 2753 apache    20   0  269m  86m 1368 S    0  4.3   0:01.09 apache2
 3036 apache    20   0  266m  83m 1372 S    1  4.2   0:01.10 apache2
 3006 apache    20   0  266m  83m 1368 S    0  4.2   0:01.98 apache2
 3007 apache    20   0  265m  82m 1372 S    0  4.1   0:02.00 apache2
 3064 apache    20   0  264m  81m 1368 S    0  4.1   0:00.57 apache2
 3045 apache    20   0  263m  80m 1368 S    0  4.1   0:00.60 apache2
 2888 apache    20   0  263m  79m  416 S    0  4.0   0:01.09 apache2
 2862 apache    20   0  260m  77m 1368 S    1  3.9   0:01.95 apache2
 2891 apache    20   0  259m  76m 1332 D    0  3.9   0:01.98 apache2
 3046 apache    20   0  258m  75m 1080 S    0  3.8   0:01.20 apache2
 2873 apache    20   0  255m  72m 1380 S    0  3.6   0:01.51 apache2
 2987 apache    20   0  252m  69m 1368 S    0  3.5   0:01.04 apache2
 2666 apache    20   0  250m  67m 1368 S    0  3.4   0:00.72 apache2
 2903 apache    20   0  248m  66m 1368 S    0  3.3   0:01.02 apache2
 3013 apache    20   0  247m  63m  416 S    0  3.2   0:01.02 apache2

Обратите внимание, что PHP работает в режиме CGI, так что это просто Apache без каких-либо модулей PHP.

Честно говоря, я не понимаю, почему еще это было бы медленным, кроме работы с ОЗУ, но он утверждает, что у него 400 МБ свободной ОЗУ. «84,8% wa» также указывает на то, что система ожидает операций ввода-вывода (подкачки?).

Что я пробовал:

А пока я уменьшил MaxClients до 25, но теперь обработка запросов страниц занимает несколько секунд, и какой-нибудь ребенок с FlashGet теоретически может засорить все процессы Apache и фактически сделать все веб-сайты недоступными: /

Вопросы:

  1. Может ли кто-нибудь предложить некоторые настройки конфигурации Apache, которые могут радикально улучшить мою ситуацию?

  2. Можно ли сказать Linux, чтобы он не менял местами / выгружать sshd, bash и все остальное, что мне нужно для ssh и убивать неконтролируемые процессы?

  3. Если ответ на вышеупомянутый вопрос - «нет», кто-нибудь, пожалуйста, объясните мне, почему в наши дни современные операционные системы имеют такие ужасающие недостатки. Для меня это звучит как эпическая неудача в дизайне ОС :(

Каждый из ваших процессов apache использует около 80 МБ памяти (столбец RES). Это огромно - здесь у меня есть веб-сервер с apache 2.2, используемый для запуска CGI, и каждый процесс использует около 5 МБ. Теперь, если у вас есть 50 процессов apache, каждый из которых использует 80 МБ, вы меняете местами как черт. Как только мы выясним, почему вы потребляете так много памяти, мы, вероятно, решим проблему.

Можете ли вы опубликовать свой файл конфигурации apache?