Picos de Memória/CPU "derrubando" Banco de Dados

Servidor Debian 11x64
4Gb de memória
2 AMD vCPUS
80 GB HD
Digital Ocean - NYC3
Configurado com Wordops

Histórico.
Meu Site (vagas.sc) estava a 3 anos em um servidor Digital Ocean configurado com Easy Engine. 20 dias atrás migrei o site para outro servidor da Digital Ocean (SERVER#1) configurado com Wordops, seguindo o treinamento do Academy. A copia do banco de dados e dos arquivos do wordpress foram via SSH.

O servidor rodou perfeitamente durante duas semanas, mas como não estava contente com algumas configurações, decidi fazer um novo servidor. Então fiz novo backup do banco e dos arquivos do WP e migrei para outro servidor da Digital Ocean (SERVER#2) usando Wordops. Nesse servidor começou apresentar a mensagem de erro de conexão com o banco de dados.

O Servidor rodou por três dias e como as mensagens estavam frequentes, decidi criar outro servidor na Digital Ocean (SERVER#3) e migrar banco e arquivo para ele. Mesmo com a migração o erro persistiu.

Vendo os vídeos do academy tentei fazer a analise dos logs. No dia 01/11 o servidor perdeu a conexão com o banco 3 vezes. Analisando os graficos de CPU e Memória na Digital Ocean é possível ver os horários das quedas. O pico de memória passa dos 85% e o banco cai.

O primeiro pico de memória/CPU ocorre as 09:01:45. Nesse momento, o log registra::

2604:a880:800:10::71b:d001 - - [01/Nov/2022:09:01:34 -0300] vagas.sc “POST /wp-cron.php?doing_wp_cron=1667304038.3129301071166992187500 HTTP/2.0” 499 0 “https://vagas.sc/wp-cron.php?doing_wp_cron=1667304038.3129301071166992187500” “WordPress/6.0.3; https://vagas.sc” “HTTP/2.0”

São varias linhas de log idênticas a mencionada acima. o IP em questão é do meu próprio servidor.

O segundo pico de memória/CPU ocorre as 14:46:30. Nesse momento, o log tem os mesmos registros listado acima.

O terceiro pico que derruba o banco ocorreu 20:26:15 e novamente é logado diversas linhas referente ao wp-cron.php.

Finalização.
Pesquisei sobre o arquivo wp-cron.php. Como solução de teste/paliativa editei o arquivo wp-config.php e inclui a linha define(‘DISABLE_WP_CRON’, true);
Para ver se o problema da queda do banco é resolvido, mas acredito que não possa ficar com esse arquivo desabilitado por muito tempo.

Estou disponibilizando o arquivo de log:
https://www.dropbox.com/s/u9ajgnc6rvjizek/access.zip?dl=0

Caso alguém possa me ajudar com a analise eu agradeço. Posso estar deixando passar alguma coisa.

Peço desculpas pelo longo descritivo e agradeço previamente todo tipo de ajuda.

Esses posts feitos sobre o cron são gerados a partir de um único endereço de IP ou de diversos?
Pelas informações do seu tópico não me parece estar relacionado com o servidor e sim a um ataque sobre o cron que é bem comum.

Verifica inicialmente se tem o Fail2Ban no seu server e também recomendaria utilizar o WpCeber em seu Wordpress.

Sobre o Cron.
O Wordpress dispara o cron com cada acesso de usuário.
Isso é muito problematico em sites com muitro tráfego.
Por aqui recomendo desabilitar o cron da forma que você fez e se ele realmente é necessário para seu projeto para publicações agendadas por exemplo executa ele pelo servidor.

Pode fazer da forma abaixo para que seu server dispare o cron de 30 em 30 minutos:

sudo -u www-data crontab -e

*/30 * * * * wget --delete-after https://dominio.com.br/wp-cron.php

Olá Gabriel, obrigado pela sua resposta.

Todos os registros no log referente a cron parte do IP do próprio servidor. O Fail2Ban está rodando conforme instruído no curso, vou ver o treinamento do WP Cerber para poder ativá-lo corretamente.

Agradeço as informações adicionais sobre o cron. Esse projeto recebe entre 7 a 10k de usuários, como não trabalho com agendamentos de post. vou deixar desativado e seguir a sua recomendação. Fiz essa alteração por volta das 4 da manhã e até o momento (agora por volta de meio dia) o banco ainda não caiu. Vou monitorando.

Mais uma vez, obrigado!

Como o cron é executado pelo próprio servidor não parece ser ataque.
O Wordpress é realmente tosco para lidar com cron.
Mantem desabilitado mas deixa ele executar a cada 30 minutos. Tem algumas tarefas como atualizações que podem depender do cron.

Depois monitora o servidor e posta novamente por aqui caso tenha novos problema.
Obrigado pelo feedback e pelo tópico com informações completas.

Dúvida:

Se eu desativar o cron no wp-config.php e configurar para o servidor disparar o cron a cada 30 minutos, como faço para voltar tudo como estava?

Eu sei que para ativar o cron novamente, basta apenas apagar a linha define(‘DISABLE_WP_CRON’, true);, mas como faço para desativar o comando de disparo do servidor a cada 30 minutos?

Outra coisa:

Para colocar o servidor para disparar o cron a cada 1 minuto, basta apenas alterar o valor no comando abaixo?

De:

sudo -u www-data crontab -e

*/30 * * * * wget --delete-after https://dominio.com.br/wp-cron.php

Para

sudo -u www-data crontab -e

*/01 * * * * wget --delete-after https://dominio.com.br/wp-cron.php

Para alterar o tempo de execusão do cron muda apenas para 1 e não para 01.
Para desativar o cron pelo servidor basta remover ou comentar esta linha com #