Apache 或 Java Servlet 中的范围请求在 10GB 后超时

Apache 或 Java Servlet 中的范围请求在 10GB 后超时

在我们的 RHEL5 64 位服务器上,使用字节范围请求处理 10+GB 的大型文件似乎存在问题。我注意到的问题是,范围请求在超过 10GB(10 GB)标记的范围时会超时,而在此之前文件中任何点的范围请求都很快。

我已经在 Tomcat 上使用 Java Servlet 和 Apache HTTPD (2.2) 进行了测试,但都失败了

如果我设置一个测试,对每个范围执行 curl 范围请求,直到限制在 10GB 以内,那么它会在 10GB 时失败(或者更准确地说,9.313231GB?)

$ curl -w '%{time_total}\n' --header 'Range: bytes=9999900000-10000000000' http://ourserver.com/bam/file.bam --fail --silent --show-error



22.840
curl: (56) Recv failure: Operation timed out

此时范围请求总是会失败。文件中 10GB 之前的任何范围请求都非常快,并且没有错误。

我猜测它在 tomcat 和 apache 中都会发生,这让我怀疑这不是 apache 或 tomcat 配置问题,那么有没有什么线索可以说明可能发生什么?

测试脚本

#!/bin/bash
set -evx
begin=9900000000
grab=100000
iter=100000
max=16000000000
url=$1
for i in `seq  -f "%.0f" $begin $iter $max`; do
    i2=$(($i+$grab))
    echo -en "$i\t$i2\t";
    curl -so /dev/null -w "%{time_total}\n"  --header "Range: bytes=$i-$i2"  $url  --fail --silent --show-error
done;

所有 10GB 以内范围请求的图片,其中 20 秒表示超时

相关内容