У меня есть программа на Python, которая использует multiprocessing.Pool
, что означает, что она порождает несколько процессов. Программа получает 70k текстовых файлов, выполняет некоторую обработку и сохраняет их в другой каталог. Я хочу использовать все ядра моего процессора при ее запуске, напримерэтот.
И какое-то время мне это удавалось. Моя программа каждый раз выполнялась примерно 10 секунд, что хорошо.
real 0m12.430s
user 0m13.072s
sys 0m9.704s
Но в последние несколько дней это было непоследовательно. Иногда он использует 100% CPU для всех ядер. В других случаях, без причины, программа использует только 0-1 процент, и ее выполнение занимает до 5 минут.
real 5m6.186s
user 0m4.844s
sys 0m4.968s
Обратите внимание, что real >> user + sys, хотя я понятия не имею, что это значит. Также обратите внимание, что я не меняю никаких параметров кода или других настроек между запусками. В этом случае я также заметил, что использование ОЗУ каждым процессом никогда не превышает 10 МБ, что может повлиять на использование ЦП.
Мой вопрос в том, как я могу вообщеначинатьдиагностировать эту проблему? Некоторые из моих гипотез:
- ОС обнаружила, что моему ноутбуку 2 года, и пытается продлить его срок службы, ограничивая использование ЦП/ОЗУ
- Возможно, ОС ограничивает использование процессора/оперативной памяти процессом, если он потребляет много ресурсов в течение длительного времени.
- Кто-то получил удаленный доступ к моему ноутбуку и троллит меня
Я использую Linux Mint 17.3 на ноутбуке с процессором Intel(R) Core(TM) i3-4005U с тактовой частотой 1,70 ГГц, 4 ядра, 8 ГБ оперативной памяти, жесткий диск
Заранее спасибо.
EDIT: Вот вывод vmstat во время работы программы
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