A reinicialização foi necessária. Esperar por isso resultou em nada acontecendo.
Após investigação adicional, foi descoberto que havia um vazamento de memória na biblioteca Perl IMAP sendo usada. Originalmente, eu tinha configurado o script Perl para carregar todas as contas de e-mail em uma matriz (de um arquivo de texto mencionado na arg 1 na linha de comando), e percorrê-las executando o código de migração para cada conta. Para cada iteração do loop, o script fazia o login no servidor de email de origem e nos servidores de email de destino, executava o código de migração e, em seguida, desconectava-se dos dois servidores de email. Isso eventualmente engoliu toda a RAM disponível, depois toda a SWAP disponível, até que finalmente init
matou o processo.
Eu achei que ia acelerar: usei screen
para executar 9 desses processos, cada um em um conjunto diferente de contas. Após o lançamento de nove desses processos, o sistema rapidamente diminuiu para um rastreamento e parou de responder todos juntos. Eu estou supondo que init
teria eventualmente matado todos os processos Perl, mas quanto tempo levaria esse refúgio? Assim, uma reinicialização foi necessária.
Eu modifiquei meu script de migração do Perl para fazer uma conta e, em seguida, sair. Então eu configurei um loop bash como este para percorrer todas as contas originadas do mesmo arquivo de texto:
# cat run_migration4.sh
#!/bin/bash
FILE=$1
# read $FILE using the file descriptors
exec 3<&0
exec 0<$FILE
while read line
do
# use $line variable to process line
echo line: $line
./migration4.pl $line
done
exec 0<&3
Isso funcionou muito bem. Consegui executar nove dessas sessões em uma sessão de tela e todas elas ocuparam uma quantidade insignificante de RAM, não perto do limite de 4G do servidor. A média de carga do servidor nunca ficou acima de 2 ou 3. Tudo foi concluído sem problemas.