isso pode ser um pouco tarde, mas posso dizer que culpar o SO simplesmente não é o caminho a ser seguido. o sistema operacional é projetado para atender às expectativas de vários cenários de casos de uso diferentes, portanto, você DEVE configurá-lo para atender aos seus requisitos.
Não só isso, mas se você está tendo tanta carga que o sistema está falhando, então você tem que otimizar seu sistema, ou expandir sua rede.
Embora otimizar muito cedo possa tornar as coisas dolorosas mais tarde, não otimizar nada desde o início pode ter as mesmas consequências. é tudo sobre equilíbrio.
No entanto, você afirma que seu objetivo é evitar que o sistema falhe ... mas, em seguida, prossiga dizendo que suas soluções não funcionaram. mas alguns deles fizeram funcionar, você simplesmente não ficou satisfeito com os resultados.
quando você fica sem memória, você troca. ou coisas quebram. fim da história . se você não quiser trocar, você precisa:
a) limit your incoming connections. this has the effect of either
turning people away
b) send them to the backlog. which has the effect of causing the site
to slow, or die.
c) buy more memory. which you did not want to do
d) scale your network. which you also did not want to do
e) load balance. which is much like 'D'
sem otimização cuidadosa, ajuste fino e expansão ... você não pode evitar que todas essas coisas aconteçam.
na minha experiência, aprendi que, ao usar uma combinação granular de todas as coisas geralmente causadas acima, funcionou no final.
primeiro, uso apache2 + mpm_event + mod_fcgid
. Eu cuidadosamente configurei praticamente todas as opções possíveis que o apache precisa configurar. isso pode levar uma noite para fazer e outra para acertar. mas valerá a pena.
Eu garantiria que sempre houvesse um grupo de trabalhadores pronto para lidar com conexões de entrada e deixá-lo crescer, mas restringiria esse pool a um limite razoável. isso pode sacrificar alguma velocidade, mas resulta em estabilidade.
segundo, eu uso os dois CGroups and IO Priority / CPU Priotiy
para agendar diferentes grupos de serviços para diferentes prioridades.
tudo o que é 100% crítico, o qual eu sempre preciso acessar, eles são reservados com um bloco de memória e são configurados com uma maior prioridade de I / O e de CPU. Eu prepararia um roteiro que define essas prioridades a cada hora, de modo que as crianças herdem essas prioridades se o pai delas mudar.
em seguida vem o DNS, depois a Web e depois o Mail. nesta ordem. Desta forma, se algo está se comportando mal, elementos mais críticos são favorecidos.
usando monitor software,
verificar se as coisas estão online, e se não, reinicie-as. se alguma coisa estiver usando mais de X MB de memória, para X Cycles ... e você não puder se conectar ao serviço (ou seja, em http://...:80
), elimine o serviço e reinicie-o. se ele reiniciar mais de X vezes em X ciclos, limite (e notifique para inspeção manual). você pode derrubar alguns usuários ocasionalmente, mas pelo menos o seu sistema permanece estável!
em terceiro lugar, se você tiver um servidor dedicado, o ID colocará todos os serviços do site em separate disk
. manter operações de IO principalmente sobre um controlador diferente.
quarta, confira os módulos do apache como mod_bw
e mod_qos
. mod_bw pode fazer mais do que apenas limitar a largura de banda por virtualhost, e mod_qos ... este é um módulo de qualidade de serviço que pode ajudar a mitigar alguns problemas.
Além do que você esperaria de um módulo QoS completo, ele pode ajudar com coisas como DoS evitando slowdos, limitando conexões NULL, e pode até desativar keepalive quando o servidor atingir um certo limite de conexões simultâneas.
finalmente, eu configuraria alguns intelligent caching front ends
ou load balancer
. por exemplo: usando algumas instâncias de VM, talvez use Varnish ou NGinx, armazene em cache os arquivos estáticos do desenvolvedor. isso descarregará todos os slots abertos que o Apache exige para servir esse conteúdo estático.
Eu realmente não tenho certeza do que você espera que aconteça quando você recebe muito tráfego. Você quer que ambos permaneçam estáveis, mas você não quer perder nenhuma funcionalidade sob estresse, e você não quer otimizar nada, e você não quer atualizar ou estender sua rede?
bem, se você não quiser MUDAR nada, como você espera que o problema desapareça?