Para o PHP, existem duas coisas importantes que aumentarão a capacidade:
- Caching PHP avançado (APC) como foi mencionado. É isso que usamos no Yahoo !. Existem outros projetos semelhantes, mas este é o bebê de Rasmus.
- FastCGI em vez de mod_php. Há um debate sobre este assunto, já que o mod_php é geralmente o mais rápido. No entanto, eu diria que você tem um único servidor Apache fornecendo tanto conteúdo PHP dinâmico quanto ativos estáticos (JS, CSS, flash, imagens, PDFs, etc.). As solicitações para esses ativos estáticos não precisam consumir tanta memória, mas porque o PHP é um módulo em todos os segmentos do Apache.
Para o Apache:
- Use o MPM do trabalhador
- Ativar KeepAlive
Você também pode ir mais longe ao considerar mudar do Apache para o Lighttpd ou Nginx . Eu amo o Apache. Eu uso o bobo de muitos de seus recursos avançados. Eu aceito sua sobrecarga porque preciso do que ela oferece. Para a pilha LAMP comum, é mais do que o necessário e um desperdício de recursos.
Para o MySQL:
- Seus esforços de otimização valerão 10 vezes quando for gasto analisando e corrigindo consultas, em vez de ajustar seus valores my.cnf. Eu não estou dizendo que não é importante ter seu caching, conexões, etc. correto ... mas para a maioria das pessoas é apenas 9% do problema.
- Durante o seu controle de qualidade, ative o log de consulta geral em seu teste / dev mysqld para capturar todas as consultas enviadas. (NÃO faça isso no seu servidor mysql de produção!)
- Use EXPLIQUE para analisar as consultas. Especialmente se você estiver usando uma estrutura com um ORM (abstrair o banco de dados e impedir que você escreva seu próprio SQL), você precisará limpar JOINS externos, SELECTs sem cláusula WHERE, ORDER BYs que induzem 'using filesort' e consultas que não usam índices.
- Se você estiver usando o MySQL 5.1 aproveite o profiler de consulta
Outras ferramentas que valem a pena considerar são mk-visual-explain
Eu citei 10 ótimas referências. Essas coisas deveriam fazer você cantarolar. Por favor, deixe-nos saber como acontece.