Freqüentemente, uma instalação de nosso aplicativo baseado no Debian-estável no local é executada em uma máquina virtual - normalmente no VMware ESXi. No caso geral, não temos visibilidade ou influência sobre o ambiente de virtualização e não temos acesso, por exemplo, ao cliente VMware vCenter ou equivalente. Eu me concentro no VMware aqui, porque esse é de longe o mais comum que vemos.
Gostaríamos de:
- Informe ao administrador do VMware de um cliente: Você pode executar nosso aplicativo, por exemplo, no seu ambiente VMware ESX, desde que atenda aos critérios de desempenho X, Y e Z.
- Ser capaz de determinar se os critérios X, Y e Z são de fato atendidos continuamente (por exemplo, agora ), mesmo em um sistema em execução (não podemos parar nosso aplicativo e executar benchmarks, e um benchmark inicial não será suficiente, pois o desempenho em ambientes virtuais muda com o tempo).
- Tenha certeza de que, se os critérios X, Y e Z forem atendidos, teremos recursos de HW virtual adequados para executar nosso aplicativo com desempenho satisfatório.
Agora, o que são X, Y e Z?
Vimos várias vezes que quando há problemas de desempenho, o problema não está no nosso aplicativo, mas no ambiente de virtualização. Por exemplo, outra máquina virtual usa toneladas de CPU, memória ou SAN nas quais os discos são realmente armazenados, e usa muito por algo que não seja nosso aplicativo. Atualmente, não temos como provar ou refutar isso.
Teoricamente, também é possível que, às vezes, nossa aplicação seja lenta ... ;-)
Como se determina a causa raiz dos nossos problemas de desempenho: ambiente virtual ou aplicativo?
Normalmente existem três áreas para problemas de desempenho CPU, memória e E / S de disco.
CPU
Por exemplo, no VMware, o administrador pode especificar Reserva e Limite, expresso em MHz, mas é, por exemplo, 512 MHz em um host ESX exatamente igual a 512 MHz em outro host ESX, possivelmente em um cluster ESX completamente diferente?
E como se mede se realmente conseguimos isso? Enquanto nosso aplicativo está em execução, talvez possamos ver que estamos com 212% de utilização da CPU em 4 CPUs. Isso ocorre porque nosso aplicativo está fazendo muito ou porque outra VM no mesmo host está executando uma tarefa intensiva da CPU e usando toda a CPU?
Memória (Balão?)
Se pedirmos, por exemplo, 16 GB de RAM, que geralmente é configurado, mas por causa dos balões , na verdade, temos apenas 4 GB e, surpresa, nosso aplicativo tem um desempenho ruim.
Pode-se perguntar às ferramentas VMware sobre o balão atual, mas descobrimos que ele geralmente está (ou pelo menos é impreciso). Vimos exemplos em que o sistema operacional acha que há 16 GB de RAM total, a soma da memória residente (RSS) de todos os processos é 4 GB de RAM, mas há apenas 2 GB de RAM livre, mesmo quando as ferramentas do VMware nos dizem que há 0 balão: - (
Além disso, apenas adicionar RSS não é válido, pois pode haver facilmente RAM compartilhada, por exemplo, memória de cópia na gravação, de modo que 512 MB + 512 MB não significa necessariamente 1 GB, mas pode significar algo menos. Portanto, não se pode simplesmente subtrair o RSS de todos os processos para obter uma medida da quantidade de RAM livre e, assim, detectar balões de forma confiável. Pode-se detectar alguns casos de balão, mas há outros casos em que o balão está em vigor, mas não é detectável por esse método.
E / S de disco
Acho que poderíamos representar graficamente ao longo do tempo o número de leituras e gravações do disco, o número de bytes lidos e gravados e o% de espera de E / S. Mas isso nos dará uma imagem precisa da E / S do disco? Imagino que se houver um minerador de bitcoin em execução em outra VM usando toda a CPU, nossa% de espera de IO aumentará, mesmo que a SAN subjacente ofereça exatamente o mesmo desempenho, simplesmente porque nossos recursos de CPU diminuem e, portanto, a espera de IO ( que é medido em% ) sobe.
Então, em resumo, qual idioma podemos usar para descrever, por exemplo, um administrador da VMware, qual desempenho precisamos, de maneira portátil e mensurável?
fonte
"It runs fine with x, y, and z"
não é preciso o suficiente. Você precisa dizer a seus clientes exatamente o que seu aplicativo exige. Se eles dar-lhe os recursos e as aplicativo executa mal, em seguida, a questão não é"What do we need from a resource perspective?"
, mas"Why is it performing poorly even though the proper resources have been allocated?"
Respostas:
Sério, a maioria dos administradores da VMware não é boa nisso: Má compreensão do gerenciamento de recursos, geralmente nenhum conhecimento do Linux (ajuda) e falta de largura de banda do tempo. Acho que a maioria dos administradores internos tem dificuldade em manter um conhecimento profundo sobre virtualização.
Felizmente, há um livro que você pode ler !
A maioria dos ambientes VMware não é ótima: design de cluster ruim, planejamento incorreto de recursos , armazenamento abaixo do padrão (por exemplo, Synology NAS), HA mal configurada, sem monitoramento ou aplicação de patches.
A VMware como organização falha conosco: são particularmente ruins na disseminação de informações atualizadas e na promoção de práticas recomendadas. Pesquisas básicas de perguntas comuns geram resultados a partir de 2009 e revisões mais antigas do VMware, apesar de processos e projetos terem mudado ao longo do tempo.
Todas essas coisas vão funcionar contra você.
Você deve determinar os requisitos reais da sua solução. Ser capaz de afirmar com precisão que seu dispositivo exige: 2 vCPU, 8 GB de RAM e 500 IOPs de desempenho de armazenamento ajudariam muito a alguém como eu.
A outra abordagem é observar um ambiente saudável ou ideal e extrapolar as métricas a partir daí.
Você descreveu problemas com determinadas implantações. Quais foram os problemas e os gargalos?
Um exemplo de uma VM de tamanho certo:
Um servidor Exchange para uma organização de 300 usuários.
Exemplos de monitoramento de recursos da VM.
Em ordem: - A VM é do tamanho certo. - A CPU está supercomprometida em todo o cluster, mas não estamos enfrentando contendas.
Bad-ish:
fonte