Я запускаю скрипт Python (python3
), который порождает (используя fork
, а не spawn
) множество процессов через multiprocessing.Process
(например, 20-30 из них) одновременно.Я уверен, что все эти процессы выполнены (.join()
) и не становятся зомби.Однако, несмотря на то, что я выполняю один и тот же код с тем же случайным начальным числом, моя работа падает из-за огромного скачка использования памяти в совершенно случайные моменты времени (использование памяти возрастает до случайного значения между 30 ГБ с 200 ГБ с из запрошенных 14 ГБ с внезапно).Иногда моя работа / сценарий вылетает через 10 минут после запуска, иногда в самом начале), а иногда и через 10 часов после запуска.Обратите внимание, что этот процесс является детерминированным, и я могу повторить его, но не могу воспроизвести сбой, что очень странно.Что я делаю с каждым из этих процессов, так это загружаю образ с диска, используя cv2.imread
(каждый может занимать 0,5 МБ памяти) и сохраняя их в общей памяти (mp.RawArray('f', 3*224*224)
или mp.Array('f', 3*224*224)
), которую я создал перед запускомпроцесс!Мой код создает и обрабатывает примерно 1500-2000 таких изображений каждую минуту на сервере, на котором я его запускаю.Очень неприятно видеть, что иногда только 100-150 из этих изображений были прочитаны с диска, но работа срывается в самом начале, когда я запрашиваю 25 ГБ памяти, когда отправляю свою работу на наши серверы, которые используют CentOS.
Я пытался увеличить запрошенную память (с 25 ГБ до 115 ГБ) на наших серверах, но мой сценарий вылетает рано или поздно и совершенно случайно.Еще одна вещь, которую я заметил, заключается в том, что, хотя я порождаю много процессов и выполняю .start()
в то же время, большинство из этих процессов не запускаются, пока не будут выполнены те, которые были созданы ранее.Это потому, что я не запрашиваю много ядер (например, 30) при работе и использую 8 ядер.
Интересно, у людей был подобный опыт?Буду признателен за ваши комментарии / предложения.