Não existe nada mais irritante do que buscar alguma informação no google e não achar ou pior, achar mais com informações que não implicam com o que você realmente quer. Isso aconteceu recentemente comigo para resolução de um pequeno mais desastroso problema: o travamento de uma máquina virtual no ESXi. Tudo bem, é simples a máquina virtual travou é só ir lá e dar um shutdown nela através do client do infrastructure, pois bem e quando você via lá dá um shutdown via client e o mesmo não desliga? Cortar os pulsos?! Pular do 20º andar, apelar para ignorancia e dar um shutdown no EXSi?! Não tem um procedimento simples e eficaz para essas horas, matar a maquina virtual. OK, porém o ESXi parece um Linux mas todo customizado para rodar maquinas virtuais e alguns comandos e processos existentes no VMWare Server, ESX 3.5 (Sem o “i”) e VMPlayer simplesmente não estão lá, o que pode facilmente um administrador ao desespero.
Verifiquei que o ESXi não possui o vmware-cmd, ou seja, não posso utilizar um stop hard. com isso me basta matar o processo responsavel pela máquina virtual, mas isso também não vai funcionar uma vez que o comando é o vmware-cmd. Dar um shutdown no ESXi vai para todas as máquinas e o processo pode continuar demorando para ser morto e com isso perder mais tempo ainda e agora com todas as máquinas virtuais desligadas, fora que se eu realizar um shutdown estilo Wolverine (puxar o cabo de força) pode gerar problemas no sistema de arquivos, sair matando processos arbitrariamente também não é legal, afinal qual é o processo que pode ser detonado?!
Diante desse cenário realizei as seguintes ações:
Conectei no ESXi via SSH e lá rodei um esxtop, com o qual verifiquei que o processo da máquina virtual que mandei desligar estava usando 98% de um dos processadores do ESXi.
ID GID NAME NWLD %USED %RUN %SYS %WAIT %RDY
25949 25949 Magneto 7 98.82 5.86 0.05 687.24 2.05
147567 147567 Storm 7 2.49 2.50 0.03 691.49 1.17
9369 9369 Cyclops 7 1.62 1.63 0.01 692.69 0.83
Sai do esxtop e dei um ps auwx | grep <nome da minha Máquina virtual> para localizar os processos ligados a minha máquina virtual.
~ # ps ax auxxxx | grep Magneto
21383448 vmm0:Magneto
21383449 vmm1:Magneto
21383451 21383447 mks:Magneto /bin/vmx
21154076 21383447 vcpu-0:Magneto /bin/vmx
21383454 21383447 vcpu-1:Magneto /bin/vmx
Não podemos matar todos os processo simplesmente pois podem gerar problemas a máquina virtual, pelo que pude entender todas as máquinas virtuais estão ligadas a um processo vmx pai, que é responsavel por agrupar todos os demais processos ligados aquela máquina. Visto isso realizei outro ps auxwww mas agora fazendo uma grep para vmx.
~ # ps ax auxxxx | grep vmx
61545 61545 vmx /bin/vmx
61547 61545 vmx /bin/vmx
61548 61545 mks:Storm /bin/vmx
61549 61545 vcpu-0:Storm /bin/vmx
68727 68727 vmx /bin/vmx
68729 68727 vmx /bin/vmx
68730 68727 mks:Cyclops /bin/vmx
68731 68727 vcpu-0:Cyclops /bin/vmx
21383447 21383447 vmx /bin/vmx
21383450 21383447 vmx /bin/vmx
21383451 21383447 mks:Magneto /bin/vmx
21154076 21383447 vcpu-0:Magneto /bin/vmx
21383454 21383447 vcpu-1:Magneto /bin/vmx
Reparei que o GID do processo vmx está vinculado ao GID dos processos vinculados a minha máquina virtual, sendo assim executei o comando kill com o GID do processo VMX vinculado a minha máquina virtual.
~ # kill -9 21383447
Um novo ps auxw revelou que os processo haviam sido mortos.
~ # ps ax auxxxx | grep vmx
61545 61545 vmx /bin/vmx
61547 61545 vmx /bin/vmx
61548 61545 mks:Storm /bin/vmx
61549 61545 vcpu-0:Storm /bin/vmx
68727 68727 vmx /bin/vmx
68729 68727 vmx /bin/vmx
68730 68727 mks:Cyclops /bin/vmx
68731 68727 vcpu-0:Cyclops /bin/vmx
No cliente a máquina Virtual apareceu como desligada na mesma hora. Ao religar a máquina virtual a mesma voltou a responder sem alertas de anormalidade.