Antes de qualquer coisa, com base na captura de tela que você publicou com htop
output, parece que você tem 512MB de RAM em um site que está executando o WordPress? Eu nunca vi o WordPress feliz em servidores com menos de 1 GB de RAM. Talvez se você estiver executando um site de teste ou desenvolvimento, 512MB é adequado, mas para um site de produção você precisa de 1GB de RAM. Essa é a raiz do seu problema. Dito isso, aqui estão algumas ideias para ajudar você a extrair um melhor desempenho da configuração que você tem:
I have no idea how to figure out what's going on. Is Apache or MySQL
not tuned properly? Maybe someone is attacking the server with
repeated hits (how would I know?). I installed htop but even if I saw
that Apache or MySQL was eating up a ton of resources, how would I
figure out why?
Primeiro, eu não entraria em pânico com um ataque acontecendo. A realidade é que seu servidor provavelmente está assumindo uma carga alta de tráfego legítimo, mas o próprio servidor não está configurado / ajustado para seu uso. É claro que configurações ruins podem fazer com que você se sente durante o ataque DDoS (Distributed Denial of Service), mas isso pode tornar sua vida miserável quando o tráfego bom / normal aparecer de repente em altos números.
Eu postei uma boa lista de itens que você pode rever para melhorar o seu LAMO empilhar o desempenho em outra pergunta semelhante, e será repassado aqui para sua referência:
-
Configure corretamente o Apache: O Apache é um bom software, mas, assim que sai da caixa, ele é um invasor de memória. Por exemplo, acredito que o padrão é permitir 255 conexões por segundo? Posso garantir a você que sites mais simples mal conseguem 40 conexões por segundo em um bom dia. Então, ajustar o Apache para ser realista para o seu tráfego ajudará. Além disso, há uma configuração
KeepAlive
no Apache que funciona muito bem! Mas fora da caixa, acredito que esteja definido como MaxKeepAliveRequests
de 100, o que é bastante maluco. Eu costumo definir isso para cerca de 30 conexões com um pequeno KeepAliveTimeout
de 2 a 3 segundos. A chave é ter o KeepAliveTimeout
para corresponder à velocidade que leva para uma página média baixar com um pouco de espaço para sobrecarga / lentidão. Portanto, se uma página for carregada em 1 segundo, faça um KeepAliveTimeout
de 2 segundos.
-
Revise o código dos seus sites do WordPress quanto a possíveis afunilamentos: Concentre-se no núcleo do PHP dele & esclarecer o que você pode. Cuidado com as chamadas excessivas do MySQL & chamadas do sistema de arquivos. É aqui que você poderá fazer o aplicativo voar! Além disso, verifique o
memory_limit
no seu php.ini
e certifique-se de que ele não seja maior que o necessário. O padrão é 64M, mas em muitos casos pode ser reduzido para 32M.
-
Ajuste do MySQL ou movendo-o para seu próprio servidor: Depois de escrever sobre o MySQL acima, percebi que você pode estar hospedando sua instância do MySQL na mesma caixa. Procure otimizar o desempenho do MySQL executando um script como primer de ajuste do MySQL . Sem ajustes, o MySQL consumirá todos os recursos & grande o sistema para baixo. Com o ajuste, o MySQL será executado melhor / mais rápido & recursos podem ser liberados para outros propósitos. Além disso, considere mover seu banco de dados MySQL para um servidor autônomo. Talvez você tenha que aprender a usar a rede corretamente & Firewall o servidor para permitir o acesso de seus servidores, mas proteger contra hackers, mas o benefício de desempenho será ótimo.
Em relação ao ajuste do MySQL, isso pode levar algumas semanas para ser definido no começo. A razão pela qual os scripts de ajuste são baseados no tráfego real que o MySQL vê. Então você basicamente faz seu site viver para o mundo, aguarde dois dias (pelo menos), execute os scripts de ajuste & depois espere mais alguns dias para sintonizar mais alguns. Após uma semana ou mais, você poderá ajustar o MySQL para funcionar tão bem quanto possível com a sua configuração.