Что касается Java кучи памяти и системной памяти - PullRequest
0 голосов
/ 19 сентября 2019

Я выполняю программу на Python из Java, используя построитель процессов.Создан файл сценария оболочки, в котором задаются некоторые переменные среды, затем выполняется сценарий python.

Process p = Runtime.getRuntime().exec(executeAutoML.sh);

Класс, содержащий указанный выше фрагмент кода, будет вызываться из планировщика Java (ScheduledExecutorService).

У моей машины Linux было около 30 ГБ оперативной памяти.

Мои вопросы:

  1. Скрипт Python предназначен для аналитических целей.Это создаст несколько огромных фреймов данных для обработки данных.Предполагая, что максимальный размер фрейма данных равен (1 миллион x 100). Может ли он использовать системную оперативную память или кучу JVM?

  2. Если он использует системную RAm, то как я могу увидеть потребление оперативной памяти?

  3. Что касается огромных объемов данных, могу ли я получить ошибку OUTomemory в JVM?Информация: Эта программа запускается на сервере WLS (2 узла) с балансировщиком нагрузки.

Пожалуйста, предложите лучший способ справиться с подобными случаями использования.

Спасибо, Виджай

1 Ответ

0 голосов
/ 19 сентября 2019
  1. Программа, запущенная с ProcessBuilder, имеет собственное виртуальное адресное пространство.Он не использует кучу Java.Даже если бы вы вызвали другую Java-программу с ProcessBuilder, это был бы отдельный процесс со своей собственной памятью / кучей.
  2. Такие вещи, как top / atop / диспетчер задач Windows, которые показывают все ваши процессы.Ваш процесс Python должен отображаться отдельно.
  3. Ответ 1. должен прояснить, что память процесса Python отделена от JVM, поэтому вы получите OutOfMemory для процесса Java только в том случае, если вы фактически исчерпаетефизической (точнее виртуальной) памяти.Что, конечно, может произойти, если ваш процесс Python использует все это.

В общем, для таких задач с огромными данными вы хотите тщательно проверить, можно ли обрабатывать данные небольшими партиями вместовсе вместе.Например, если у вас есть операции со строками данных, которые не нуждаются в информации или влияют на другие строки, вы можете загрузить строку за строкой, обработать каждую строку и записать ее в файл результатов перед обработкой следующей.Таким образом, вы не будете загружать все данные сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...