mod_perl2 с apache 2.22 Apache2::RequestIO::print: (103) Программное обеспечение вызвало прерывание соединения

Я пытаюсь перенести приложение mod_perl2 на AWS. Как часть порта, я думал, что перейду с Debian Squeeze на Wheezy с последней стабильной комбинацией mod_perl и Apache2.

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

Apache2::RequestIO::print: (103) Software caused connection abort

всякий раз, когда я пишу клиенту, то есть:

$self->req->print($output);

я пробовал tcpdumpЯ отвечаю клиенту, и я вижу, как он записывается, но на стороне клиента ответ не получен, а просто фишки. Я не могу найти информацию о том, как обойти это.

1 ответ

Решение

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

Клиент отменял запрос до того, как ответ был полностью написан, что приводило к отключению Apache::RequestIO (по причинам, которые я до сих пор не знаю). Я не мог понять, почему я видел это поведение.

Используя tcpdump Я мог видеть, что данные были записаны клиенту - и это выглядело хорошо.

Просматривая страницу в Chrome и просматривая сетевой стек, я увидел, что мой запрос данных отменяется после того, как не было получено никакого ответа (что было странно, потому что код хорошо работал на других серверах, и я мог видеть, что ответ пишется). Отладка была труднее, потому что из-за сбоя Apache с ошибкой в ​​распечатке ввода-вывода я не мог проверить, равны ли записанные байты байтам данных. Я не был уверен, что что-то застряло на стороне сервера.

Итак, я изменил Content-Type ответа от application/json в text/html, чтобы я мог запросить страницу и просто посмотреть на фактический ответ в виде текста. Как только я это сделал, я мог видеть, что ответ был в порядке.

Я начал искать другие причины и обнаружил, что при переходе на новый сервер я пропустил изменение некоторых URL-адресов в БД для указания на новый сервер, что означало, что мое приложение пыталось получить данные из старого DB. Это, в свою очередь, вызывало множество проблем с синхронизацией, которые вызывали мои проблемы. Как только я исправил конфиг, проблемы исчезли.

Другие вопросы по тегам