Как контролировать использование памяти процессами, порожденными JVM - PullRequest
0 голосов
/ 12 октября 2009

Я кодирую приложение, которое создает JVM и должно контролировать использование памяти процессами, порожденными JVM.

Ответы [ 3 ]

2 голосов
/ 12 октября 2009

Вы можете подключиться к процессу JVM с помощью JMX, чтобы получить информацию о состоянии / распределении памяти, а также спровоцировать сборку мусора. Но сначала вам нужно включить JMX-мониторинг вашей JVM: http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html.

2 голосов
/ 12 октября 2009

Я предполагаю, что вы говорите о не-Java "процессах", порожденных с помощью Runtime.exec(...) и т. Д.

Ответ заключается в том, что это зависит от ОС, а не от того, что поддерживают стандартные библиотеки Java. Но если вы собираетесь сделать это в Linux (или UNIX), я могу подумать о трех подходах:

  • Пусть Java порождает команду через скрипт оболочки, который использует встроенную ulimit для уменьшения пределов памяти, затем exec s фактическая команда; см man 1 ulimit.
  • Напишите небольшую команду C, которая делает то же самое, что и оболочка оболочки. Это будет иметь меньше затрат, чем подход сценария оболочки.
  • Попробуйте сделать то же самое с JNI и библиотекой собственного кода. Не рекомендуется, поскольку вам, вероятно, потребуется повторить поведение Process и ProcessBuilder, а это может быть очень сложно.
0 голосов
/ 12 октября 2009

Если под «контролем» вы подразумеваете «ограничение до известной верхней границы», то вы можете просто передать

-Xms`lower_bound` 

и

-Xmx`upper_bound` 

к аргументам виртуальной машины, когда вы запускаете процесс. см. Соответствующую настройку здесь

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