Como determinar o status do meu servidor

1

Gostaria de saber como determinar o status do meu servidor usando o comando top ou se preciso alterar o servidor ou adicionar mais recursos. Em seguida é a saída do comando top no meu servidor.

A seguir, alguns outros fatos - Os valores médios de carga variam de 28.XX a 77.XX. - As CPUs% id na maior parte do tempo estão entre 10.0 e 22.0 e algumas vezes caem para 30.0. - O servidor está sendo executado em uma máquina virtual. - O servidor em que a máquina virtual está montada possui um processador Intel (R) Xeon (R) E5-2403 0 @ 1.80GHz, com 4 núcleos - Os aplicativos da Web, o serviço de banco de dados, o memcached, o servidor da Web e outros aplicativos de servidor relacionados estão em execução há uma semana. - O serviço presence.py é o que faz a maior quantidade de trabalho e atualmente está verificando a presença de 703 nós.

Eu diria que não preciso adicionar mais memória RAM ao sistema, mas certamente parece que a CPU está sobrecarregada. Ainda temos que adicionar mais de 100-200 nós, então acho que o servidor não conseguirá lidar com isso. Estou certo?

EDIT: histórico de presença.py

O serviço Presence (presence.py) é um aplicativo proprietário que executa processos (duas vezes o número de núcleos), um processo principal e (duas vezes o número de núcleos-1) processos de trabalho. Para cada nó registrado, um encadeamento é criado em um dos processos de trabalho, portanto, se tivermos 700 nós, cada processo de trabalho terá ~ 100 encadeamentos em execução. Cada thread verifica o status de seu nó via telnet ou HTTP uma vez por segundo, então você pode imaginar a carga de cada processo. Isso significa que, na maior parte do tempo, cada thread está dormindo ou esperando pela rede i / o .

O serviço Presence começou com uma carga de 350 nós e estava funcionando muito bem, mas, por algum tempo, desde que começamos a aumentar a carga e ultrapassamos os 600 nós, ela começou a operar um pouco lenta. Por exemplo, se você executar o seguinte comando curl www.google.com , leva muitos segundos para executá-lo.

    
por Storo 13.10.2016 / 17:26

2 respostas

1

substitua presence.py por uma solução mais leve. algo como

cat config.txt | while read C; do
    C=($C)
    nmap -p ${C[1]} ${C[0]} | grep open || mail -s "Warning; port ${C[1]} on server ${C[0]} is unreachable" ${C[2]} < /dev/null &
done;

referenciado de crontab com uma configuração como

echo -e "127.0.0.1\t22\[email protected]" > config.txt

Não há razão para usar qualquer CPU significativa para verificar uma porta; é estritamente uma operação de limitação de IO. (você deve ver user e wait de tempos de CPU mais baixos.)

Este exemplo de Bash é considerado uma solução pesada (sem reutilização), se você quiser realmente codificar isso em c ... seu python provavelmente está fazendo algo como falhar ao reciclar objetos ou algum outro trabalho desnecessário incorrendo em supervisão. Jogar mais recursos com código ineficiente pode funcionar, mas geralmente é mais barato consertar a ineficiência. Você também pode querer sintonizar a pilha de rede .

    
por 13.10.2016 / 22:15
0

Essa é uma média de carga razoavelmente alta que você chegou lá e cerca de 80% da CPU ocupada. Uma userland ocupada, um kernel bastante ocupado e até mesmo algumas interrupções de software cutucando um pouco a cabeça.

Eu realmente espero que você esteja fazendo chamadas de rede assíncronas, isso ajudará na carga, mas não no programa, mas no sistema. Eu diria que você precisa de mais CPU, como você disse. Além disso, verifique quantos tópicos você tem, como se houvesse muito, e todos eles estão clamando por CPU. Você pode ter o switch de contexto pressionando as coisas. Às vezes, menos threads é mais!

    
por 23.11.2016 / 12:08