A CPU não é o único afunilamento para processar solicitações. Tudo depende do que seu aplicativo está fazendo. Se você está fazendo muito trabalho de IO ligado, isso pode ser um fator maior que o da CPU.
O ASP.net tem um número limitado de encadeamentos no ThreadPool, então, se todos estiverem ocupados, eles começarão a enfileirar. Verifique esta peça para obter algumas dicas sobre o enfileiramento de solicitações.
Você está fazendo muitas inserções / atualizações do SQL por solicitação? Obter alguns timings sobre aqueles, com Glimpse mesmo. Muitos deles e eles mantêm threads / pedidos aguardando respostas.
Você está ligando para algumas APIs de terceiros? Aqueles atrasam os threads / requisições em espera e há limitações em quantas conexões simultâneas são permitidas.
O que o aplicativo faz para cada usuário? você está recuperando mais de 1.000 registros?
Verifique este artigo de suporte do MS Connect , há um bom número de opções de configuração do IIS que podem ajudá-lo , se você não tiver mexido naqueles já.
Novamente, isso é sem saber o que seu aplicativo faz e como.