Quantos núcleos estou usando em um servidor Linux?

30

Estou apenas imaginando como posso descobrir no bash quantos núcleos de CPU um usuário está usando agora em um servidor Linux?

Estou enviando uma quantidade razoável de trabalhos em segundo plano para o servidor, portanto, gostaria de escrever um script bash para verificar antes de enviar um trabalho se os trabalhos em execução (processos) enviados por mim forem muitos, porque tenho para permitir que outros usuários tenham núcleos suficientes para usar em seus trabalhos. Gostaria de saber qual comando bash pode me informar quantos núcleos meus trabalhos estão usando agora.

Obrigado e cumprimentos!

    
por Tim 01.10.2009 / 19:46

6 respostas

39

Para obter o número de núcleos de CPU por CPU:

grep "^core id" /proc/cpuinfo | sort -u | wc -l

Ou para obter o número de CPUs físicas :

grep "^physical id" /proc/cpuinfo | sort -u | wc -l
    
por 20.08.2010 / 23:17
25

Não sei se isso ajuda, mas você pode usar o utilitário mpstat para obter um detalhamento do uso da CPU por processador individual (ou núcleo). Por exemplo:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

Neste exemplo, você pode ver que os 0 , 1 e 6 da CPU estão fazendo mais trabalho do que o restante deles. Às vezes, você verá que uma única CPU está próxima (ou em) 100%, enquanto outras estão em zero. Isso pode ser um indicador de programa (ou parte de um programa) que é single-threaded e somente capaz de usar uma única CPU por vez.

Para instalar o mpstat em um sistema Fedora, RHEL ou CentOS, use yum install sysstat .

    
por 01.10.2009 / 21:53
2

A menos que seja explicitamente configurado para não (isto é, fixando um processo a uma CPU específica), todos os núcleos podem ser considerados em uso o tempo todo. O planejador alocará os processos no próximo núcleo disponível. Caso em questão, "System Monitor" (parte do GNOME) está mostrando minha carga quase o mesmo em todos os 4 núcleos da minha máquina.

    
por 01.10.2009 / 19:50
2

Então você verá que há respostas aqui que lhe dirão como seus núcleos estão sendo utilizados.

NO ENTANTO - isso não está realmente fazendo um serviço para você. Você fez uma suposição básica que simplesmente não sustenta - que seus trabalhos tenderão a se agrupar em algum subconjunto dos núcleos.

Em vez disso, seus trabalhos serão espalhados por todos os núcleos, a menos que você implemente algo que os mantenha "gravados" de alguma forma. (Nota: não estou recomendando isso; apenas dizendo "a menos que")

Aqui está uma estratégia alternativa: Identifique para o seu sistema em particular qual é o nível de LOAD quando você sente que é "aceitável" que outros usuários adicionem mais trabalhos. Em seguida, crie algo que envie apenas um novo trabalho em segundo plano quando o nível de carga estiver abaixo desse limite.

Dessa forma, a solução será independente da contagem de núcleos, mais portátil, mais flexível e mais fácil de "ajustar" também.

    
por 01.10.2009 / 23:19
2

Se você quiser fazer isso para que funcione no linux e no OS X, você pode fazer:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
    
por 29.11.2013 / 11:51
1

Você pode obter uma estimativa aproximada executando top , atingindo ' U ' e especificando seu nome de usuário e, em seguida, adicionando a utilização da CPU de seus poucos processos principais.

    
por 01.10.2009 / 19:56