所以可以说有一个服务器进程需要太长时间。客户抱怨它“超时”。
如果我错了,请纠正我,但这个特定的超时可能与 apache 的超时设置有关,但不一定。我相信情况确实如此,因为在测试有问题的页面时,我们无法让它可靠地超时——大多数情况下,浏览器只会旋转多久。
如果与客户端的连接出现问题,超时设置将生效,如文档中所述。但如果连接正常,则由客户端关闭连接(我相信)。
我假设这也意味着如果客户端关闭他们的浏览器,Apache 将达到超时限制(在我的例子中为 300 秒),并终止进程。情况似乎并非如此。
这是我测试它的方法:
我在服务器上的一些代码中添加了一个 while 循环:
too_long = 2000
tstart = time.time()
f = open('/tmp/timeout_test.txt', 'w')
while True:
time.sleep(100)
elapsed = time.time() - tstart
f.write('Loop, %s elapsed\n' % elapsed)
if elapsed > too_long:
break
然后我打开网页以启动该循环,并在服务器上运行 netstat:
~$ netstat -np | grep ESTAB | grep apache
tcp 0 0 10.102.123.6:443 10.102.119.101:53519 ESTABLISHED 16534/apache2
tcp 0 0 127.0.0.1:60299 127.0.0.1:5432 ESTABLISHED 16534/apache2
(那是我在 10.102.119.101,服务器在 10.102.123.6)
然后我关闭了浏览器并重新运行了 netstat 行:
~% netstat -np | grep ESTAB | grep apache
tcp 0 0 127.0.0.1:60299 127.0.0.1:5432 ESTABLISHED 16534/apache2
我的连接消失了,但服务器仍在循环中,我可以通过运行来确认:
~% lsof | grep timeout
apache2 16534 www-data 14w REG 8,1 0 536533 /tmp/timeout_test.txt
这意味着 apache 进程仍然打开该文件。在接下来的 2000 秒内,当我运行时:
~% cat /tmp/timeout_test.txt
我什么都没有。2000 秒后,netcat 行什么也没有产生,tmp 文件被 while 循环的输出填充。
因此,无论客户端连接如何,似乎 Apache 进程都只是按照要求执行的操作?那个环回连接是关于什么的?