mod_perl2 with apache 2.22 Apache2 :: RequestIO :: print:(103)软件导致连接中止

时间:2014-10-22 15:30:13

标签: apache mod-perl apache2.2 mod-perl2

我正在尝试将一个mod_perl2应用程序移植到AWS。作为端口的一部分,我以为我会从Debian Squeeze转移到Wheezy,使用最新的稳定mod_perl& Apache2组合。

应用程序正常工作,我尝试将JSON响应写入客户端。此时,每个请求都在客户端上取消,在服务器上我收到错误

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

每当我写信给客户时,即:

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

我已经尝试tcpdump对客户端的响应,我可以看到它被写出来了,但是客户端没有收到响应,它只是barfs芯片。我找不到任何有关如何解决这个问题的信息。

1 个答案:

答案 0 :(得分:3)

我发现网上有很多人在没有多少答案的情况下询问这个问题。我的问题的解决方案非常具体,但我认为我会发布我所做的事情,它可能对某人有帮助。

客户端在响应完全写入之前取消了请求,这使得Apache :: RequestIO崩溃了(原因我还不知道)。 我无法理解为什么我会看到这种行为。

使用tcpdump我可以看到数据正在写入客户端 - 看起来很好。

通过检查Chrome中的页面并查看网络堆栈,我可以看到我的数据请求在没有收到响应后被取消(这很奇怪,因为代码在其他服务器上工作正常,我可以看到响应正在写)。调试可能更难,因为Apache崩溃时出现打印IO错误,我无法检查写入的字节是否等于数据字节。我不确定是否有东西卡在服务器端。

因此,我将响应的内容类型从application/json更改为text/html,以便我可以查询页面并将实际响应视为文本。一旦我这样做,我就能看出答案很好。

我开始寻找其他原因,我发现在迁移到新服务器时,我错过了更改数据库中的某些URL以指向新服务器,这意味着我的应用程序正在尝试从旧数据库中获取一些数据。 这反过来导致了一系列时间问题,这导致了我的问题。一旦我修复了配置,问题就消失了。