После нескольких сообщений 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