Moodle с 10 нитями медленно на lighttpd
Я запускаю Moodle на Lighttpd на Centos 6 с 1G оперативной памяти. Если я открою 10 тем для Moodle, то Moodle начинает работать очень медленно.
Как я могу ускорить работу сервера? Мне нужно обслуживать много пользователей.
Я проверил память свободной командой и у меня много свободной памяти.
РЕДАКТИРОВАТЬ: я могу видеть высокий процессор php-cgi.
Топ:
# top -b -n 1 | head -30
top - 08:55:32 up 24 days, 21:37, 2 users, load average: 0.70, 0.24,
0.08
Tasks: 153 total, 2 running, 151 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.3%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si,
0.1%st
Mem: 1016480k total, 828692k used, 187788k free, 151316k buffers
Swap: 999992k total, 4036k used, 995956k free, 426880k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29247 lighttpd 20 0 477m 103m 61m R 92.1 10.4 1:37.25 php-cgi
23947 root 20 0 15020 1188 864 R 3.6 0.1 0:00.03 top
1 root 20 0 19228 1040 860 S 0.0 0.1 0:00.61 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:05.49 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:08.99 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 4:35.86 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenwatch
14 root 20 0 0 0 0 S 0.0 0.0 6:02.87 xenbus
15 root 20 0 0 0 0 S 0.0 0.0 0:21.59 sync_supers
16 root 20 0 0 0 0 S 0.0 0.0 0:18.66 bdi-default
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00
kintegrityd/0
18 root 20 0 0 0 0 S 0.0 0.0 0:13.23 kblockd/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ata/0
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ata_aux
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00
ksuspend_usbd
свободно:
# free -m
total used free shared buffers cached
Mem: 992 809 183 0 147 416
-/+ buffers/cache: 244 748
Swap: 976 3 972
cat / proc / cpuinfo:
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 4
model name : Quad-Core AMD Opteron(tm) Processor 2374 HE
stepping : 2
cpu MHz : 2200.130
cache size : 512 KB
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu de tsc msr pae cx8 cmov pat clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext
3dnow up rep_good unfair_spinlock pni cx16 popcnt hypervisor lahf_lm cmp_legacy extapic cr8_legacy abm sse4a misalignsse
3dnowprefetch
bogomips : 4400.26
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management:
2 ответа
В то время как ваш единственный поток php-cgi высок, загрузка системы не является; Вы привязываете только одно из ядер вашего процессора. Ваша коробка, кажется, имеет достаточно места для роста, вам просто нужно настроить конфигурацию Lighttpd и PHP-CGI, чтобы получить необходимый масштаб.
Первоначальная проблема заключается в том, что вы отправляете все запросы в один поток php-cgi. Таким образом, вы используете остальные 3 ядра вашей коробки. Вместо использования php-cgi, я бы предложил запустить PHP-FPM, который будет прослушивать один сокет или порт; и загрузит баланс между запросом и количеством рабочих потоков, которые вы определили. Если этот блок также выполняет MySQL или другие задачи, вы можете уменьшить его, чтобы оставить одно ядро пустым для других нужд обработки.
Другая вещь, на которую стоит обратить внимание, это то, что вы на самом деле тестируете. Когда вы говорите 10 потоков - о чем вы на самом деле говорите. Когда я здесь 10 потоков, я бы предположил, что у вас есть 10 процессов, которые делают столько вызовов к серверу, сколько они могут (JMeter) Это может привести к 10 req/sec или это может привести к 50 req/sec. Другой вопрос: каждый поток также загружает все ресурсы в запросе html или это просто HTML.
В Google есть много руководств по настройке PHP-FPM и Lighttpd, вот быстрое, которое я вытащил из верхней части поиска в Google - http://www.howtoforge.com/installing-lighttpd-with-php5-php-fpm-and-mysql-support-on-ubuntu-12.04
На основании того, что я вижу; вы должны иметь возможность в 3-4 раза увеличить количество подключений после настройки Lighttpd и PHP на использование всех ваших ядер.
Загрузка процессора для php-cgi довольно высока. Медлительность вашего сервера обычно может быть связана с двумя вещами: процессор или ввод-вывод.
Операции ввода-вывода (если помеха) видны через индикатор%wa (ожидание) и могут быть вызваны нехваткой памяти и перестановкой (что приводит к тому, что память помещается на диск, а затем все замедляется). Как правило, это хорошая идея для веб-серверов, где стабильность не является абсолютно критичной (как это обычно бывает с веб-страницами: если она не работает, просто обновите), чтобы полностью удалить своп с помощью команды (от имени root)
swapoff -a
Если ваша загрузка ЦП высока и она исходит от PHP, но% wa низок, то вы определенно сталкиваетесь с проблемой производительности, связанной с выполнением кода PHP (например, в отличие от запросов SQL). Лучший способ избежать этого - попытаться использовать кэширование кода операции (например, APC или кэш кода операции Zend, поставляемый с PHP 5.5). Кэш Opcode эффективно использует немного памяти, но избегает большого количества вычислений (он помещает предварительно скомпилированные версии ваших PHP-скриптов в память, поэтому загрузка их дважды - или десять раз - только "вычисляет" их один раз).
При этом Moodle - не самая лучшая LMS, если вы планируете запускать ее на "сервере" с низким процессором и низкой памятью.