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

Настройка Apache / MySQL / PHP для Wordpress

Я пытаюсь понять, почему мои процессы apache съедают так много памяти

Мои спецификации срезов (1,5 ГБ ОЗУ, CentOS 5, Apache2, PHP 5.2, MySQL)

Как вы можете видеть, мои основные процессы занимают почти половину всей моей памяти, и когда запускается больше процессов, сервер почти останавливается, часто переходя в режим подкачки и сбой.

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   
6817 apache    40   0  296m 103m 3920 S  0.0  6.7   0:03.52 httpd                         
6789 apache    40   0  295m 101m 3932 S  0.0  6.6   0:07.04 httpd                         
6765 apache    40   0  284m  91m 3948 S 55.1  5.9   0:12.45 httpd                         
6798 apache    40   0  284m  90m 3944 S  0.0  5.9   0:05.49 httpd                         
6542 apache    40   0  283m  90m 3956 S  0.0  5.8   0:43.25 httpd                         
6827 apache    40   0  283m  88m 3796 S  0.0  5.7   0:01.83 httpd    

Кто-нибудь знает, что может быть причиной того, что apache (и php) потребляет столько памяти?

              total       used       free     shared    buffers     cached
Mem:          1545        827        718          0          3        111
-/+ buffers/cache:        713        832
Swap:         3071        103       2968

Вы почти наверняка используете mod_php, что означает, что вы почти наверняка используете apache в mpm_prefork.

Если производительность в целом нормальная до тех пор, пока загрузка не заставит вас начать подкачку, быстрое решение - начать регулирование MaxClients Apache. Если apache разрешено форкнуть рабочие процессы в любое время, он начнет подкачку под нагрузкой. Запросы будут стоять в очереди до тех пор, пока не станет доступен воркер, поэтому все может замедлиться, но не так медленно, как смерть путем замены.

Если вам действительно нужно настроить вещи более жестко, подумайте о том, чтобы отказаться от prefork apache mpm. Это означает запуск PHP как FastCGI. Если вы собираетесь использовать PHP под FastCGI, вам следует рассмотреть возможность обновления до PHP 5.3.3, который имеет гораздо более удобный менеджер процессов FastCGI (параметр --enable-fpm configure).

php-fpm / worker намного эффективнее с точки зрения памяти, чем устаревший mod_php. Затем вы можете настроить количество процессов / потоков apache независимо от количества процессов PHP. И ваши процессы PHP с тяжелым объемом памяти используются только для обслуживания содержимого, управляемого php, и не тратятся на обслуживание статических файлов.

Мой хрустальный шар немного пыльный, но я думаю, вы используете memcached и его расширение PHP. Если это так, попробуйте отключить его, если он вам действительно не нужен.

Другая возможность заключается в том, что у вас есть какой-то кеш операционного кода, например XCache, установил и настроил его на использование большого количества памяти.

Вы можете попробовать

pmap -x `pidof apache`

чтобы узнать, что занимает память.

PID  USER   PR NI VIRT RES  SHR  S %CPU %MEM TIME+   COMMAND
6817 apache 40 0  296m 103m 3920 S 0.0  6.7  0:03.52 httpd
6789 apache 40 0  295m 101m 3932 S 0.0  6.6  0:07.04 httpd
6765 apache 40 0  284m 91m  3948 S 55.1 5.9  0:12.45 httpd
6798 apache 40 0  284m 90m  3944 S 0.0  5.9  0:05.49 httpd
6542 apache 40 0  283m 90m  3956 S 0.0  5.8  0:43.25 httpd
6827 apache 40 0  283m 88m  3796 S 0.0  5.7  0:01.83 httpd

Wordpress - единственное, что работает на Apache? Мне любопытно в основном об очень высокой загрузке процессора PID 6765. Интересно, что он делает. Что касается mem% s, это выглядит вполне нормально для настройки веб-приложения, поскольку каждый поток фактически выполняет более одного воркера.

Какой MPM вы используете для apache и как его настроили?

Кроме того, если вы публикуете дампы терминалов, начинайте каждую строку с четырех пробелов. Это позволяет сохранить форматирование.

Показатели памяти для процессов apache вполне нормальны для установки PHP. Здесь хорошо настроенный сервер apache / php со многими модулями / расширениями, которые не загружены или даже скомпилированы, обычно работает от 200 до 350 МБ виртуальной памяти на процесс и от 40 до 45 МБ резидентной памяти на процесс.

Вы, наверное, плохо знакомы с подсистемой виртуальной памяти? Судя по тому, что вы пишете, ваша система, вероятно, здорова. Проверьте среднюю нагрузку, вы в порядке с этими показателями памяти, если они тоже не будут высокими.

Если вы думаете, что он должен навсегда оставаться на свопе 0MiB, вы ошибаетесь, это было бы действительно глупо для вашей операционной системы.

Не загружайте неиспользуемые модули apache (например, python, perl и т. Д.).

Используйте модуль eAccelerator php. Это компилятор php. Вы можете получить более быстрое выполнение и меньшее использование памяти.

Возможно, другие пользователи тоже правы.