Eu tenho um programa python que utiliza multiprocessing.Pool
, o que significa que ele gera vários processos. O programa obtém 70 mil arquivos de texto, faz algum processamento e os salva em outro diretório. Quero usar todos os núcleos da minha CPU ao executá-lo, comoesse.
E por um tempo, eu consegui. Meu programa demorava cerca de 10 segundos para ser executado todas as vezes, o que é bom.
real 0m12.430s
user 0m13.072s
sys 0m9.704s
Mas nos últimos dias tem sido inconsistente. Às vezes ele usa 100% da CPU para todos os núcleos. Outras vezes, sem motivo, o programa usa apenas 0-1 por cento e leva até 5 minutos para ser executado.
real 5m6.186s
user 0m4.844s
sys 0m4.968s
Observe que real >> user + sys, embora eu não tenha ideia do que isso implica. Observe também que não estou alterando nenhum parâmetro do código ou qualquer outra configuração entre as execuções. Nesse caso, também notei que o uso de RAM de cada processo nunca ultrapassa 10 MB, o que pode afetar o uso da CPU.
Minha pergunta é: como possocomeçardiagnosticar esse problema? Algumas das minhas hipóteses são:
- O sistema operacional detectou que meu laptop tem 2 anos e está tentando prolongar sua vida útil limitando o uso de CPU/RAM
- Talvez o sistema operacional acelere o uso de CPU/RAM de um processo se ele estiver usando muito por um bom tempo.
- Alguém obteve acesso remoto ao meu laptop e está me perseguindo
Estou executando o Linux Mint 17.3 em um laptop com CPU Intel(R) Core(TM) i3-4005U a 1,70 GHz, 4 núcleos, 8 GB de RAM, HDD
Desde já, obrigado.
EDIT: Aqui está a saída do vmstat enquanto o programa está em execução
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 1 0 2773588 242912 2522744 0 0 114 54 229 812 11 2 83 5 0