Como saber se o comando 'nice' está funcionando?

1

Eu tenho um processo que é executado em cerca de 100% da CPU. Então eu corro com legal:

$ nice /dir/myamd.sh

O comando top mostra que o meu processo ainda funciona perto de 100% (talvez um pouco baixo como 99%). O comando nice está realmente funcionando?

Obrigado a todos por suas respostas! Posso usar os dois nice e cpulimit ? Porque eu quero que meu processo ceda para os outros E tome apenas 80% da CPU, por exemplo.

    
por Tony 24.01.2017 / 04:45

5 respostas

3

Nice altera a prioridade relativa do processo. Se não há mais nada que precise da CPU, então ainda não há mais nada com uma prioridade mais alta, então ele pode continuar a usar 100% da CPU.

Muitas máquinas modernas têm múltiplos núcleos, então se você tiver 4 núcleos, mas apenas 3 processos capazes de rodar, este é outro exemplo em que o processo poderia usar 100% de um núcleo, independentemente do bom nível.

    
por 24.01.2017 / 04:57
1

top e ps lax exibirão o nível atual de todos os processos no sistema na coluna NI .

Uma analogia para bons níveis e carga da CPU

Pense na CPU como caixa no caixa de um supermercado. Se você tem uma CPU multi-core, existem vários deles.

Cada contador tem uma fila de clientes aguardando para pagar seus mantimentos. Esta é a fila de execução da CPU.

O comprimento da fila é a carga atual da CPU. Essa é a carga da pessoa atrás do balcão neste momento.

Uma pessoa na fila pode ser legal para as pessoas por trás, sendo totalmente legal deixar que elas passem por elas na fila, caso realmente precisem se apressar.

O caixa no balcão ainda tem o mesmo valor para trabalhar , e ainda funciona no mesmo ritmo (100%, até que a fila esteja vazia), mas as pessoas na fila chegarão ao balcão em uma ordem dependendo, entre outras coisas, de como elas são legais para outras pessoas na fila.

No seu caso, o supermercado pode estar vazio, mas há um único cliente com seu carrinho realmente grande que precisa fazer o check-out, e o caixa está trabalhando o máximo que pode para processar todas as coisas que ele está comprando. Ele é muito legal, mas ... mas isso não importa, o caixa não diminui a velocidade para ter tempo de conversar.

Em um sistema Unix, ao contrário de um supermercado, a CPU só irá lidar com um processo por um período de tempo antes de enviá-lo de volta à fila. Isso é para que um único processo não bloqueie os outros.

Você pode até mesmo inserir no contexto a mudança para essa analogia. É quando a CPU muda de um processo para outro, e pode ser demorado fazê-lo com muita frequência. Isso é basicamente o que acontece entre servir os clientes no balcão; o tempo que leva para as compras processadas serem colocadas em sacos, etc., e o tempo que leva para o próximo cliente avançar, diga "oi", etc.

Nota: Estou usando "CPU" acima, onde em alguns casos devo dizer "kernel". Do ponto de vista da experiência do usuário, não há diferença.

    
por 24.01.2017 / 11:08
0

No seu exemplo, provavelmente não está funcionando.

Você não está executando este programa em segundo plano (&). Então este é provavelmente o único programa rodando neste TTY (além do shell que o iniciou).

Se você executar um segundo programa em um TTY diferente - por exemplo, uma janela de terminal diferente - os níveis relativos agradáveis dos dois programas não terão efeito visível.

link

    
por 25.01.2017 / 10:06
0

O comando nice está funcionando conforme projetado, mas não como você espera.

Se você realmente quiser limitar o uso da CPU e possivelmente desperdiçar os recursos de CPU disponíveis, poderá usar:

cpulimit -l 25 /dir/myamd.sh
O

cpulimit monitorará o uso da CPU do myadm.sh e o ajustará usando o SIGSTOP / SIGCONT para manter seu uso médio abaixo dos 25% ( de um limite de vCPU). Em sistemas multi-core / threads, você pode limitar o uso a mais de 100%.

Uma alternativa mais eficiente é usar cgroups , ver por exemplo este blog para detalhes.

    
por 24.01.2017 / 12:08
0

Você pode usar o comando ps para verificar se colocou corretamente o seu comando

:

$ nice -n 15 sm WILLY\ WILLIAM\ -\ Ego.m4a &> /dev/null &
[1] 29426
$ ps -lp $!
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 29426  2279  1  95  15 - 141822 poll_s pts/7   00:00:00 sm

Você pode ver o nível niceness (15, neste caso) na coluna NI . Uma vez feito isso, você deve relaxar: tudo o que está acontecendo é que o programa está rodando sem concorrência para o uso de recursos do sistema, se ele ainda atingir 100% da CPU.

    
por 24.01.2017 / 10:56

Tags