在我们的 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;