Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 17, 2009 01:23:42

alphaville
От:
Зарегистрирован: 2009-07-17
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

wsgi+apache 100% загрузка процессора

Добрый вечер.

Разрабатываю сайт который будет работать следующим образом:

По запросу пользователя скрипт парсит несколько страниц (httplib) и выдаёт результат пользователю. От запроса до выдачи проходит около минуты.

Сейчас уже вообщем-то всё работает, но сервер поднят пока на моём ноутбуке. Во время работы httpd.exe всегда ест 100% процессора. Работу под нагрузкой вроде держит - если запускаю сайт из трёх разных браузеров, то всё нормально.

Проблема вот в чём:
Если один браузер сейчас ждёт результат, то автозаполнение(Ajax.autocompleter из Prototype и wsgi+MySQL на сервере) не работает, пока первому не придёт результат.

Помогите понять где затык.

Планирую запустить сервис как многопользовательский проект с большой нагрузкой, но никогда таким не занимался.



Офлайн

#2 Дек. 17, 2009 05:25:12

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

wsgi+apache 100% загрузка процессора

alphaville
Проблема вот в чём:
Если один браузер сейчас ждёт результат, то автозаполнение(Ajax.autocompleter из Prototype и wsgi+MySQL на сервере) не работает, пока первому не придёт результат.
очевидно твой серверный сценарий блокирует mysql-таблицу (LOCK TABLE) либо стартует транзакцию. А сценарий с автозаполнением не может взять данные из таблицы/базы пока те заблокированы.



Офлайн

#3 Дек. 17, 2009 14:24:25

alphaville
От:
Зарегистрирован: 2009-07-17
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

wsgi+apache 100% загрузка процессора

dimabest
alphaville
Проблема вот в чём:
Если один браузер сейчас ждёт результат, то автозаполнение(Ajax.autocompleter из Prototype и wsgi+MySQL на сервере) не работает, пока первому не придёт результат.
очевидно твой серверный сценарий блокирует mysql-таблицу (LOCK TABLE) либо стартует транзакцию. А сценарий с автозаполнением не может взять данные из таблицы/базы пока те заблокированы.
Дело похоже действительно в доступе в базе. Но у меня ничего не блокируется, все запросы заканчиваются connection.close() и вроде ничего не держат. Возможно просто влияет большое количество обращений к БД. Их получается где-то 10 простых обращений (лёгкий SELECT) и в конце в базу записывается кэш запроса (~100 КБ).

Есть ли какие-то варианты посмотреть, сколько какой запрос выполняется в БД?



Офлайн

#4 Дек. 17, 2009 18:12:23

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

wsgi+apache 100% загрузка процессора

alphaville
в конце в базу записывается кэш запроса (~100 КБ).
после записи в базу комит делаешь?

Офлайн

#5 Дек. 17, 2009 18:15:48

alphaville
От:
Зарегистрирован: 2009-07-17
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

wsgi+apache 100% загрузка процессора

Извините, опять не то. Не в базе дело.

Вот простейший wsgi скрипт: выдаёт браузеру рандомное число.

from random import random

def application(environ, start_response):
output = str(random())
status = '200 OK'

response_headers = [('Content-type', 'application/javascript'),('Content-Length', str(len(output)))]
start_response(status, response_headers)

return [output]
Если один браузер ждёт ответа, то в другом рандомное число не придёт, пока первый не получит результат.

Все обращения к MySQL убрал. Сервис MySQL вообще остановлен. Затык именно в apache + wsgi + python.



Отредактировано (Дек. 17, 2009 18:25:57)

Офлайн

#6 Дек. 17, 2009 18:16:59

alphaville
От:
Зарегистрирован: 2009-07-17
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

wsgi+apache 100% загрузка процессора

o7412369815963
alphaville
в конце в базу записывается кэш запроса (~100 КБ).
после записи в базу комит делаешь?
да, конечно. посмотрите пожалуйста мой коммент выше. там я все обращения к базе убрал. лучше не стало.



Офлайн

#7 Дек. 17, 2009 18:50:28

alphaville
От:
Зарегистрирован: 2009-07-17
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

wsgi+apache 100% загрузка процессора

Видимо это просто общая проблема недостатка производительности. При запросе httpd всегда отжирает 100% процессора и ноут не тянет.

Есть ещё десктопный комп 3 гига оперативы, пень 4-й. Переносить на него?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version