[FUG-BR] [HISTORICO][RESOLVIDO] - scp fatal: Write failed: Cannot allocate memory no /var/log/messages
Paulo Henrique - BSDs
paulo.rddck em bsd.com.br
Quarta Agosto 27 20:12:05 BRT 2014
Saudações,
O intuito da thread é apenas para documentar caso algum outro
companheiro sofra ou venha sofrer com tal problema.
O problema em si é que qualquer copia de uma grande quantidade de
arquivos ou mesmo de um arquivo grande apenas através do scp faz o
servidor sshd não conseguir alocar memoria e resetar a conexão, contudo
pelo que observei ( no meu ambiente 2 servidores e nos ambientes das
threads que tinha a solução ) o problema só ocorre quando o servidor que
está rodando o sshd ( acontece com o rsync também ) tem junto a execução
do Hipervisor VirtualBox.
A solução do problema é o ajuste da variavel net.graph.maxdata=65536 no
arquivo /boot/loader.conf, por padrão essa variável tem o valor 512.
##### Trecho da mensagem exibida no /var/log/messages do lado do
servidor sshd #####
Aug 27 00:13:36 cloud02 sshd[76535]: fatal: Write failed: Cannot
allocate memory
Aug 27 00:31:57 cloud02 sshd[76577]: fatal: Write failed: Cannot
allocate memory
Aug 27 00:35:54 cloud02 sshd[76599]: fatal: Write failed: Cannot
allocate memory
###########################################################################
No lado cliente o erro poder se parecer com o abaixo no caso do scp.
##### Retorno de erro por parte do scp no lado do cliente
###########################
Connection to cloud02.intranet closed by remote host.
lost connection
###########################################################################
Tal tunning requerido para resolver esse problema foi muito discutido em
varias outras threads na internet contudo somente nas que estou postando
abaixo foi descriminada a solução e o por que de tal ajuste, vale a pena
ler a discussão inteira descobri um monte de coisas no FreeBSD.
http://lists.freebsd.org/pipermail/freebsd-emulation/2011-July/008977.html
http://unix.derkeiler.com/Mailing-Lists/FreeBSD/stable/2011-07/msg00154.html
Para se saber que há necessidade de ajustar a variável net.graph.maxdata
tem que se observar a ultima linha da saída do comando "vmstat -z" ( não
conhecia ).
Se a saída for igual ou parecida com essa abaixo onde o penúltimo campo
tem contadores diferente de 0 então o ajuste de tal variavel se faz
necessário.
ITEM SIZE LIMIT USED FREE
REQ FAIL SLEEP
NetGraph data items: 72, 527, 0, 527,
1234536576,3001, 0 ( essa é a ultima linha do comando e o campo
importante aqui é o campo FAIL ).
Como teste estava usando um diretório com aproximadamente 25 000 000 de
arquivos ( 265 Gbytes ) no qual faz parte do backup da empresa, antes
estava usando uma gambiarra via script para manter o backup desse
diretorio, porem agora efetuei tres copias consecutivas e o teste foi um
sucesso, não ocorreu nenhuma interrupção na copia.
Recomento para quem não conhece as variáveis do vmstat -z que de uma
lida no manual, pois tem muita informação boa sobre o que elas manipula
no sistema.
Abraços a todos e espero que ninguém mais perca tempo com essa pequena
inconsistência.
--
Paulo Henrique.
Grupo de Usuários de Sistemas BSDs no Brasil.
Fone: +55 21 96713-5042
Não importa o que faça, sempre haverá alguém em algum lugar do mundo que será sempre melhor do que você.
Mais detalhes sobre a lista de discussão freebsd