Tengo un programa Python que utiliza multiprocessing.Pool
, lo que significa que genera múltiples procesos. El programa obtiene archivos de texto de 70k, los procesa y los guarda en otro directorio. Quiero hacer uso de todos los núcleos de mi CPU cuando lo ejecuto, comoeste.
Y por un tiempo he podido hacerlo. Mi programa tardó ~10 segundos en ejecutarse cada vez, lo cual es bueno.
real 0m12.430s
user 0m13.072s
sys 0m9.704s
Pero durante los últimos días ha sido inconsistente. A veces utiliza el 100% de la CPU para todos los núcleos. Otras veces, sin ningún motivo, el programa sólo utiliza entre 0 y 1 por ciento y tarda hasta 5 minutos en ejecutarse.
real 5m6.186s
user 0m4.844s
sys 0m4.968s
Tenga en cuenta que real >> usuario + sys, aunque no tengo idea de lo que esto implica. También tenga en cuenta que no voy a cambiar ningún parámetro del código ni ninguna otra configuración entre ejecuciones. En este caso, también he notado que el uso de RAM de cada proceso nunca supera los 10 MB, lo que podría afectar el uso de la CPU.
Mi pregunta es, ¿cómo puedo siquieracomenzardiagnosticar este problema? Algunas de mis hipótesis son:
- El sistema operativo ha detectado que mi computadora portátil tiene 2 años y está tratando de prolongar su vida limitando el uso de CPU/RAM.
- Tal vez el sistema operativo limite el uso de CPU/RAM de un proceso si se ha estado usando mucho durante bastante tiempo.
- Alguien obtuvo acceso remoto a mi computadora portátil y me está troleando.
Estoy ejecutando Linux Mint 17.3 en una computadora portátil con CPU Intel(R) Core(TM) i3-4005U a 1,70 GHz, 4 núcleos, 8 GB de RAM, disco duro
Gracias de antemano.
EDITAR: Aquí está la salida de vmstat mientras el programa se está ejecutando
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