страница принимается слишком долго

Я переписал веб-приложение с использования mod_python на использование mod_wsgi. Проблема в том, что теперь до обслуживания любого запроса требуется не менее 15 секунд (firebug намекает, что почти все это время тратится на получение данных). До перезаписи потребовалось менее 1 секунды. Я использую werkzeug для разработки приложений и apache в качестве сервера. Нагрузка на сервер кажется минимальной, как и использование памяти. Я использую apache2-mpm-prefork.

Я использую настройку по умолчанию для mod_wsgi - думаю, это называется «встроенный режим». Я проверял, поможет ли переход на apache2-mpm-worker, но не помог. Судя по журналу приложения, похоже, что приложение выполняется с запросом довольно быстро - менее 1 секунды. Я изменил ведение журнала apache на отладку, но ничего подозрительного не вижу. Я переместил приложение для работы на другом компьютере, но все было по-прежнему.

Заранее благодарим за любую помощь.


person arik    schedule 29.07.2012    source источник


Ответы (1)


Похоже, длина содержимого вашего ответа не соответствует тому, сколько данных вы фактически отправляете обратно, а длина возвращаемого содержимого больше. Таким образом, браузер ожидает дополнительных данных, пока, возможно, не истечет время ожидания.

Используйте что-то вроде:

http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Tracking_Request_and_Response

чтобы проверить, какие данные отправляются обратно и совпадают ли такие вещи, как длина содержимого.

В противном случае невозможно угадать, в чем проблема, если вы не показываете небольшой автономный пример кода, иллюстрирующий проблему.

person Graham Dumpleton    schedule 29.07.2012
comment
Благодарю за ответ. Кодировка передачи установлена ​​на фрагменты. В любом случае теперь я знаю, в чем проблема - 640 КБ сгенерированной страницы отправляются более чем в 400 000 пакетов. И почти 100% размера пакета составляет 40-80 байт. Есть идеи, почему это происходит? - person arik; 30.07.2012
comment
Возможно, вы получаете строку из приложения WSGI, а не итерацию строк, например список строк. Если вы вернете строку, сервер WSGI будет рассматривать ее как итерацию по строкам длиной один символ и сбрасывать каждый отдельный символ за раз. Это привело бы к появлению большого количества фрагментов, если бы длина содержимого не была задана и веб-сервер под ним отправлял его в виде кодировки фрагментированной передачи. См. code.google.com/p/modwsgi/wiki/. - person Graham Dumpleton; 30.07.2012
comment
Спасибо, вот и все! Ты замечательный! - person arik; 30.07.2012