Se o seu ThreadLimit for 64 (ThreadLimit é um limite global), então, iirc, você só poderá atender 64 clientes de uma só vez. A figura leva pelo menos 500-1500 ms para atender cada cliente, você tem um problema de matemática.
Se você puder servir um único cliente em 500 ms, serão 128 clientes atendidos por segundo, ou seja, 27,3 segundos para atender 3500 clientes.
Se você puder servir um único cliente em 1,5 s, são 42,66 clientes por segundo, ou seja, 82 segundos para atender 3500 clientes.
2 segundos por cliente é 54,6 segundos para atender 3500 clientes.
500 ms é provavelmente um cálculo razoável no tempo de configuração do TCP, tempo de solicitação, tempo de transferência, etc, dependendo da latência na rede.
Eu fiz um teste para ver quanto tempo leva para atender a uma única solicitação por vez e depois faço as contas para descobrir quanto tempo levaria para atender a todos se cada solicitação tivesse o mesmo tempo de exibição.
Você provavelmente precisará de um total de 1000 threads prontos para poder exibir esse arquivo em 3,5 segundos.
Além disso, você pode querer ver quanto tempo leva o apache para ativar os threads - se ele mantém apenas 30 threads quando inativo, e a máquina está ociosa até este ponto, então ele tem que girar todos os threads a serem capaz de começar a servi-los. Certifique-se de que seu número mínimo de threads ociosos seja alto.
Editar:
Hmm, fiz alguns testes e parece que você pode esperar um tempo máximo de transferência de 40 ms em algo como uma rede corporativa. Se forem necessários 40 ms para atender um cliente, serão 1600 clientes por segundo, um pouco menos de 2 segundos para atender 3500 clientes.
A próxima melhor resposta que tenho é que a corrida do tráfego está provocando falhas de ethernet. Nós costumávamos ter um servidor web que funcionasse bem durante o dia, mas que se transformaria em lixo à noite. Descobri que nossos backups estavam causando falhas nos uplinks do switch, diminuindo a velocidade do switch. Autonegociação ruim + cabos ruins estavam causando isso.