Eu tenho um programa python que utiliza multiprocessing.Pool
, o que significa que ele gera vários processos. O programa obtém 70k arquivos de texto, faz algum processamento e os salva em outro diretório. Eu quero fazer uso de todos os meus núcleos de CPU ao executá-lo, como isso .
E por um tempo, eu consegui. Meu programa levou ~ 10 segundos para ser executado a cada vez, o que é bom.
real 0m12.430s
user 0m13.072s
sys 0m9.704s
Mas nos últimos dias tem sido inconsistente. Às vezes, usa 100% de CPU para todos os núcleos. Outras vezes, sem nenhum motivo, o programa usa apenas 0-1% e leva até 5 minutos para ser executado.
real 5m6.186s
user 0m4.844s
sys 0m4.968s
Observe que o 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 posso começar a diagnosticar esse problema? Algumas das minhas hipóteses são:
Estou executando o Linux Mint 17.3 em um laptop com CPU Intel (R) Core (TM) i3-4005U a 1.70GHz, 4 núcleos, 8 GB de RAM, HDD
Obrigado antecipadamente.
EDIT: Aqui está a saída do vmstat enquanto o programa está sendo executado
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
Tags performance cpu memory linux cpu-usage