1) It seems advisable to have an application pool per website. Are there any caveats to this approach? Can one application pool, for example, hog all the CPU, Memory, Etc...?
Esta é uma abordagem muito boa; não há boas razões pelas quais eu possa pensar em ter "sites" (aplicativos) diferentes compartilhando o mesmo pool. A menos que eles precisem compartilhar um único recurso de algum tipo. Uma aplicação poderia, teoricamente, consumir muita CPU ou memória, mas mudar a forma como os aplicativos são agrupados não afetará muito isso.
2) When should you allow multiple worker processes in an application pool. When should you not?
É melhor deixar isso de lado, usando as configurações padrão. A menos que você realmente saiba o que está fazendo, isso pode afetar negativamente seu site / aplicativo.
3) Can private memory limit be used to prevent one application pool from interfering with another? Will setting it too low cause valid requests to recycle the application pool without getting a valid response?
a) Teoricamente
b) Sim, configurá-lo para baixo pode ter efeitos negativos. Novamente, a menos que você tenha necessidades específicas e saiba o que está fazendo, deixe-as em paz.
4) What is the difference between private and virtual memory limits?
Isso é muito complicado, aqui está uma postagem rápida que eu acho que pode ajudar: link
5) Are there compelling reasons NOT to run one application pool per site?
Mais uma vez, apenas o motivo pelo qual consigo pensar é que, se houver algum tipo de "recurso compartilhado" que os diversos aplicativos precisam, você poderá executá-los no mesmo processo.
Para aplicativos e sites de uso geral, o IIS é bem configurado com seus valores padrão.
**** ATUALIZAÇÃO ****
Em relação à sua solicitação de informações adicionais sobre o segundo lugar, você não deve fazer isso, a menos que tenha uma necessidade específica para isso. Mesmo com ações do servidor que demoram muito tempo, as solicitações são fornecidas usando vários encadeamentos e você desejaria usar "Solicitações Assíncronas" para manipular tarefas de execução longa (o que libera um encadeamento de encadeamento de encadeamentos para tratar de outras solicitações). Realisticamente, não consigo pensar em nenhum bom motivo para permitir vários processos para um único pool.
Uma vez que você começa a falar sobre múltiplos processos, você pode se deparar com coisas como: perder estado da sessão porque uma sessão está ativa no processo 1, mas a solicitação está sendo processada pelo processo 2. Ou pior ainda, como fazer alguma comunicação entre processos, que é uma verdadeira dor.
Não importa o que você venha a ter em relação a um motivo para vários processos, eu estaria disposto a apostar que há uma maneira melhor de lidar com isso (em vez de ativar outro processo).