Найти - Пользователи
Полная версия: wsgi+apache 100% загрузка процессора
Начало » Web » wsgi+apache 100% загрузка процессора
1
alphaville
Добрый вечер.

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

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

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

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

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

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

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

Вот простейший 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.
alphaville
o7412369815963
alphaville
в конце в базу записывается кэш запроса (~100 КБ).
после записи в базу комит делаешь?
да, конечно. посмотрите пожалуйста мой коммент выше. там я все обращения к базе убрал. лучше не стало.
alphaville
Видимо это просто общая проблема недостатка производительности. При запросе httpd всегда отжирает 100% процессора и ноут не тянет.

Есть ещё десктопный комп 3 гига оперативы, пень 4-й. Переносить на него?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB