Я использую Django, wsgi с apache, но сервер очень медленный, когда я пытаюсь вставить данные на сервер mysql. Вставка 200 строк в таблицу занимает 1 секунду. Странно то, что apache и mysql используют только 3% процессора и памяти. Я уверен, что что-то неправильно настроено, но я не могу его найти.
Вот мой конфигурационный файл apache, настройка wsgi и результат команды «top».
Я очень ценю, если кто-нибудь может мне немного помочь. Спасибо!
Мой файл конфигурации apache:
WSGIScriptAlias / "/home/jiechao/EZ_Green/apache/ems_django.wsgi"
ServerName www.ezgreenbuildings.com
WSGIDaemonProcess ezgreenbuildings.com processes=2 maximum-requests=1000 threads=25
WSGIProcessGroup ezgreenbuildings.com
wsgi файл:
os.environ['DJANGO_SETTINGS_MODULE'] = 'ems.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
sys.path.append("/home/jiechao/EZ_Green/django")
sys.path.append("/home/jiechao/EZ_Green/django/ems")
результат верхней команды:
top - 15:56:02 up 25 days, 19:30, 1 user, load average: 0.74, 0.24, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.8%us, 0.7%sy, 0.0%ni, 58.5%id, 40.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4124236k total, 3242020k used, 882216k free, 157960k buffers
Swap: 4192252k total, 440k used, 4191812k free, 2750284k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6487 www-data 20 0 101m 63m 7288 S 1 1.6 0:03.02 apache2
30558 mysql 20 0 313m 44m 7020 S 1 1.1 0:54.98 mysqld
258 root 20 0 0 0 0 D 1 0.0 1:09.21 jbd2/sda1-8
10243 root 20 0 0 0 0 S 0 0.0 0:00.04 kworker/1:1
14410 jiechao 20 0 208m 8268 3296 S 0 0.2 4:39.92 python
1 root 20 0 3504 1876 1276 S 0 0.0 0:01.58 init
2 root 20 0 0 0 0 S 0 0.0 0:00.13 kthreadd
3 root 20 0 0 0 0 S 0 0.0 0:45.39 ksoftirqd/0
5 root 20 0 0 0 0 S 0 0.0 0:00.40 kworker/u:0
6 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0 0.0 0:03.85 watchdog/0
После редактирования.
Я добавил «WSGIProcessGroup» сейчас, так что теперь он должен вызывать режим демона. Я использую Prefork для MPM, но не понимаю, как посмотреть настройки MPM.
Что касается посещений сайта, я думаю, что 1000 посещений в секунду - это то, что я ожидал.
У вас есть несколько проблем.
Вам не хватает директивы WSGIProcessGroup, что означает, что WSGIDaemonProcess является избыточным и даже не используется. Вы там работаете во встроенном режиме, а не в режиме демона. Встроенный режим - не лучшая идея, если вы не знаете, как правильно настроить Apache. Читать:
Если бы вам удалось настроить его так, чтобы режим демона использовался должным образом, настройки ваших процессов / потоков были бы безумно высокими и, вероятно, просто занимали бы много памяти в вашей системе, что потенциально могло бы привести к началу обмена и замедлению вашей системы.
Из-за отсутствия WSGIProcessGroup вы, по крайней мере, еще не вызываете это.
Насколько серьезна проблема, которую вы создали для себя, работая во встроенном режиме, действительно зависит от того, какой Apache MPM вы используете и каковы настройки MPM.
Итак, прежде чем вы сможете продолжить отладку, вам необходимо выяснить, используете ли вы предварительную вилку Apache или рабочий MPM, а также какие настройки MPM вы используете. Получите эту информацию и отредактируйте свой вопрос, добавив дополнительную информацию.
Также дайте реалистичную оценку того, сколько запросов в секунду ваш сайт действительно обрабатывает. Таким образом можно оценить, насколько неправильны настройки процессов / потоков процессов MPM и демона.
Для дополнительной информации см .:
То, что там есть, поможет вам определить, какой MPM вы используете, и какой режим используется: встроенный или режим демона. Плюс, загружается ли также mod_python, что также может вызвать другой мир боли.
ОБНОВЛЕНИЕ 1
Настройки Apache MPM находятся в файлах конфигурации Apache. Прочтите документацию Apache о настройках MPM, чтобы знать, какие они есть. Особенно с prefork MPM, если вы не понимаете, что это такое и как правильно их настроить для настройки вашего сайта, у вас ничего не получится.
Что касается утверждения 1000 посещений в секунду, если это правда, то вы собираетесь значительно замедлить работу, используя максимальное количество запросов в 1000, поскольку процессы вашего веб-приложения будут перезапускаться каждые пару секунд, а задержки в этом будут все замедляется. Если можно избежать этого, никогда не следует использовать максимальное количество запросов в производственной системе.
Честно говоря, я сомневаюсь в утверждении, что вы обрабатываете 1000 посещений в секунду. Маловероятно, что приложение Django, использующее базу данных, сможет работать где-то рядом с этим на одном сервере. Это реальный трафик или это просто ваши мечты о том, с чем вы хотите справиться? Какой фактический мониторинг производительности вы используете для подтверждения того, что вы обрабатываете такое количество запросов в секунду?