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

apache2: конфигурация mpm

После нескольких сообщений nagios, таких как «CRITICAL - load average: 135.12, 92.20, 44.09» и oom-killer, я снова и снова проверял конфигурацию с разными настройками, но безуспешно.

Единственный обходной путь, который, кажется, помогает с ящиком ubuntu, - это очистка cronjob:

[ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

Чтение информации oom-killer говорит мне о том, что apache2 является плохим (родительским) процессом. На всервере мало трафика и почти нет пиков.

lscpu

Архитектура: x86_64

Операционные режимы ЦП: 32-бит, 64-бит

Порядок байтов: Little Endian

ЦП: 1

бесплатно -m

Mem: 2003 835 1168 0 18 381

- / + буферы / кеш: 435 1568

Своп: 1019 129 890

apache2.conf mpm

<IfModule mpm_prefork_module>
    StartServers          2
    MinSpareServers       2
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   10000
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    KeepAliveTimeout     15     
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          100     
    MaxRequestsPerChild 10000   
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          100     
    MaxRequestsPerChild 10000
</IfModule>

Нет ли чего-нибудь вроде mysql_tuner.sh для apache или полезного примера для подобного vps?

Спасибо

Вы чрезмерно выделяете память - OOM означает «Недостаточно памяти» - высокие средние значения нагрузки будут результатом замены машины.

Вам не нужен сценарий настройки, чтобы знать, какие настройки использовать. Запустите Apache, затем посмотрите, как используется ОЗУ одним потоком. Обычно для приложения PHP ожидается около 30 МБ. Затем вы можете начать выяснять, сколько потоков вы действительно можете запустить.

Вы, вероятно, обнаружите, что чрезмерно выделяете память на уровне приложения (максимальная память PHP или MySQL), а не в количестве самих потоков Apache; это просто то, что приложение переворачивает использование через край.

А пока будьте очень консервативны, а затем двигайтесь вверх. Так что уменьшите настройки примерно до этого:

StartServers          1
MinSpareServers       1
MaxSpareServers       10
MaxClients            15
MaxRequestsPerChild   1500

Затем уменьшите все настройки памяти MySQL или, по крайней мере, количество подключений (примерно до 15); и уменьшите все ваши PHP max. настройки памяти.

Скрипт использования памяти

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

Просто создайте новый файл,

Например. /root/memory_usage.sh

Затем запустите с именем приложения,

Например. /root/memory_usage.sh apache2 или /root/memory_usage.sh mysqld

#!/bin/bash

grandtotal=0

if [ $# -lt 1 ];then
  echo "$0: invalid option"
  echo "You are missing required arguments"
  echo "1 Application name or 'all', 2 2nd application name (optional)"
  exit 0
fi

if [[ "$1" == "all" ]]; then
  tot=0;for i in `ps -e -orss=`;do tot=$(( $tot + $i )); done;
  echo "Total " $(( $tot /4096 )) "MB"
  exit
fi

for app in $@; do
  echo -n $app
  ps u -p $(pidof $app) | awk 'NR > 1 {nm += $5} END {print " Total:  " nm/1024 " MB"}'
  apptotal=`ps -e -orss=,args= | grep "$app" | awk 'NR > 0 {nm += $1} END {print nm}'`
  echo "$app Total: " $(( $apptotal / 4096 )) "MB"
  grandtotal=$(( $apptotal + $grandtotal ))
done

if [ $# -gt 1 ];then
  echo "Grand total: " $(( $grandtotal / 4096 )) "MB"
fi