A resposta acabou por depender de uma informação que não está presente na minha pergunta - mas a saída dtruss
deveria ter sido uma grande dica!
Eu tenho uma diretiva PerlMapToStorageHandler Apache2::Const::OK
na configuração do meu apache, conforme a sugestão na documentação mod_perl . Essa é uma configuração de todo o host e impede que o apache chame ap_directory_walk()
e stat()
ing um monte de arquivos toda vez que receber uma solicitação. Isso é desejável quando todos os seus URIs são "virtuais" (ou seja, não correspondem a arquivos reais no disco), mas isso também significa que você não pode servir arquivos estáticos!
Minha solução foi criar uma rotina PerlMapToStorageHandler
personalizada que evite as chamadas stat()
de todos os arquivos, exceto o que eu quero veicular:
package MyMapToStorageHandler;
use strict;
use Apache2::RequestRec();
use Apache2::Const -compile => qw(DECLINED OK M_TRACE);
sub handler {
my $r = shift;
# Fall through to the default handling for TRACE requests and requests
# for the index.html file.
if ($r->method_number == Apache2::Const::M_TRACE || $r->uri eq '/index.html') {
return Apache2::Const::DECLINED;
}
# Skip ap_directory_walk stat() calls by just returning OK
return Apache2::Const::OK;
}
1;
Em seguida, no meu arquivo httpd.conf
, substituí minha diretiva PerlMapToStorageHandler Apache2::Const::OK
existente por:
PerlLoadModule MyMapToStorageHandler
...
PerlMapToStorageHandler MyMapToStorageHandler
Isso funcionou.