
Estou usando a distribuição Debian 8 Linux em 2 configurações de PC diferentes. A primeira configuração que você notará abaixo é aquela que utilizo há muito tempo. Esta configuração usa 100% da CPU em horários de pico, então decidi comprar um novo PC com especificações muito mais altas. Estou executando um antigo aplicativo Linux de 32 bits lançado há mais de 10 anos, chamado samp03svr. Este é um aplicativo de thread único, então procurei apenas CPU de alta frequência. Os processadores Xeon não me ajudariam. O aplicativo precisa de uma frequência de CPU maior do que o número de núcleos.
Aqui estão as configurações do meu PC:
Uma configuração mais antiga Placa-mãe: ASUS P8H61-M Processador: Intel i5-3570 @ 3,4 GHz RAM: 2x8GB Kingston 1333MHz
Uma configuração mais recente Placa-mãe: B250M-D3H-CF Processador: i7-7700K CPU a 4,20 GHz RAM: 2x8GB Kingston 2133MHz
O que eu esperaria da configuração mais recente é um uso de CPU muito menor, mas, surpresa, isso não está acontecendo. Na verdade, o uso da CPU é cerca de 5 vezes maior do que a configuração mais antiga. Os testes que fiz foram feitos para a mesma quantidade de carga de trabalho, com o mesmo sistema operacional e os mesmos drivers. Tentei até desabilitar o multithread, mas não há diferença no uso da CPU.
O que você recomendaria fazer?
Responder1
Se o seu objetivo é atender a demanda durante os horários de pico mencionados, eu consideraria, se possível, executar o programa do servidor nas duas máquinas que você possui agora e colocá-las atrás de um balanceador de carga, como o haproxy.
Por outro lado, se o seu objetivo é reduzir o consumo de CPU do seu programa de servidor, você tem algumas opções.
Você pode diminuir a prioridade do seu processo para que o kernel agende seu tempo de CPU de forma que não domine sua CPU. Isso pode ser feito usando os comandos nice
ou renice
. No Debian, os valores de prioridade variam de -20 a +19, e o valor padrão (iniciar um processo sem usar nice) é 0. Quanto maior o valor, menor será a prioridade. Torna-se fácil lembrar se você pensar nisso como "quanto melhor um processo, mais ele estará disposto a ceder seu tempo de CPU para outros processos".
Inicie seu programa assim usando diferentes valores de gentileza:
nice -n +12 /path/to/your/program
Se o seu programa já estiver rodando, você pode usar renice
com seu pid:
#first find the pid
pgrep your_program_name
#or
ps aux | grep your_program_name
#now use the pid here
renice -n +12 pid_of_your_program
#or if you are comfortable combining these
renice -n +12 $(pgrep your_program_name)
Outra opção é usar uma ferramenta chamada cpulimit
. Ele permite que você execute um programa e defina a porcentagem máxima de CPU que deseja permitir.
#install the package
apt-get install cpulimit
#run your program, for example limiting to 25%
cpulimit -l 25 /path/to/your/program