Parece haver um problema ao exibir grandes arquivos de 10 GB com solicitações de intervalo de bytes em nosso servidor RHEL5 de 64 bits. O problema que estou percebendo é que as solicitações de intervalo estão expirando para intervalos que estão ultrapassando a marca de 10 GB (dez gigabytes), enquanto as solicitações de intervalo em qualquer ponto do arquivo antes disso são rápidas.
Eu tenho testado no tomcat com um servlet java e apache HTTPD (2.2) e ele falha em ambos
Se eu configurar um teste que executa solicitações de intervalo de curl em todos os limites de até 10 GB, ele falha exatamente em 10 GB (ou talvez mais precisamente, 9,313231 GB?)
$ 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
É nesse ponto que as solicitações de intervalo sempre falham. Qualquer pedido de intervalo antes de 10GB no arquivo é muito rápido e não tem erros.
Eu acho que o fato de acontecer tanto no tomcat quanto no apache me deixa desconfiado de que não é um problema de configuração do apache ou do tomcat, então há alguma pista sobre o que poderia estar acontecendo?
Script para teste
#!/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;
imagem de todas as solicitações de intervalo de até 10 GB, onde os 20 segundos indicam tempo limite
Tags tomcat7 timeout apache-2.2 http big-data