O que o comando sync faz?

13

Eu sei o que isso faz ... Eu acho que estou curioso porque está corrigindo um problema em um aplicativo que eu herdei. Eu assumi uma aplicação de tomcat razoavelmente grande que atua como servidor Red5 para um monte de clientes flexíveis, e lida com muitos dados de interação em tempo real, que são eventualmente liberados para uma API de trilhos. A questão estava sob muita carga ao longo do tempo, o que resposava a esses clientes foi crescendo para 3-400 ms, onde normalmente ele < 100 ms. O cliente suspeitava que era um problema de memória que nós realmente nunca pudemos confirmar. Um dia, um servidor de teste que estava executando um teste de carga parou de receber pedidos ou foi extremamente lento. Por um capricho eu enviei

sync && echo 3 > /proc/sys/vm/drop_caches

e, magicamente, o servidor voltou à vida e começou a funcionar a toda velocidade servindo essas conexões. Isso foi uma coincidência ou esse comportamento faz sentido e por quê?

    
por j_mcnally 28.08.2013 / 23:16

2 respostas

19

Qualquer disco rígido é de magnitude mais lenta que a sua RAM, então o Linux usa qualquer RAM extra que você possa ter flutuando para armazenar em cache os dados do sistema de arquivos. No entanto, isso nunca deve causar problemas de desempenho, a menos que haja algo errado com o disco rígido, ou os serviços no servidor estejam tentando gravar dados em uma taxa tão alta por tanto tempo que o servidor não pode armazenar em cache ou recuperar os dados. Também pode ser um sinal de que o disco rígido está chegando ao fim de sua vida útil.

De qualquer forma:

  • a execução de man sync dirá o que a sincronização faz [libera os buffers FS]
  • googling 'linux drop_caches' lhe dirá que o eco do número 3 libera todas as páginas de memória desnecessárias do cache [isso não deve ser necessário em um sistema saudável]
  • command1 && command2 divide-se em 'se o comando1 terminar com êxito e, em seguida, executar o comando2'
    • o parceiro para isso é command1 || command2 aka 'se o comando1 falhar, em seguida, execute o comando2'

O comando que você recebeu é uma correção temporária na melhor das hipóteses e é sintomático de algo errado com o seu sistema. Seus discos estão no final de sua vida útil ou seu sistema está com falta de energia suficiente para o que você está fazendo com ele ou ambos .

    
por 28.08.2013 / 23:30
5

A AWS não é para os fracos de coração e você acaba de encontrar uma das razões. A pobre situação de E / S de disco na AWS é bem conhecida e um dos principais fatores a serem considerados por qualquer pessoa que esteja construindo um aplicativo sobre ela. Existem instâncias otimizadas para disco e alguns outros truques (como construir um RAID 0 fora dos volumes do EBS) que você pode tentar melhorar. Certifique-se de usar instâncias maiores (pelo menos m1.large) para garantir que o kernel possa armazenar em buffer a E / S do disco.

    
por 29.08.2013 / 01:17

Tags