У нас есть такие же проблемы здесь с другой ОС (Sun Solaris 10 - 32bit), но я вижу общую точку зрения: Introscope.
Мы подозревали, что он слишком много выделяет памяти (утечка памяти?), поскольку она использует собственную библиотеку (* .so, доступ к которой осуществляется через JNI).
Чтобы понять мою точку зрения, в этом случае мне необходимо кое-что прояснить в отношении памяти процесса JVM: всей памятиПроцесс Java разделен на две разные части, нативную и Java.
Память для части Java (которая управляется сборщиком мусора) может контролироваться с помощью стандартного API JVM.Просто помните, что в Java вы можете контролировать только эту часть памяти процесса JVM.Он содержит кучу (eden & 2 оставшихся в живых), oldgen, permgen.Эта часть памяти, как правило, самая большая, поэтому есть способы ее мониторинга, а для остальных ее нет.
Остальная часть памяти процесса, нативная часть, отличается.Он состоит из сетевых сокетов / буферов, файловых дескрипторов / буферов, фактических структур данных и буферов GC, собственных буферов библиотек, собственного кода, скомпилированного JIT-компилятором, и некоторых других внутренних специфичных для JVM вещей.Существует также исполняемый код JVM и нативные библиотеки.Обычно в этой части нет стандартного способа (часто совсем нет), за исключением использования отладчика.
Спросив C & A о собственной библиотеке Wily / Introscope, они объяснили нам, что:
- динамически распределяет память;
- нет способа ограничить потребление памяти;
- нет способа предсказать потребление памяти;
- этоиспользуется Wily только для сбора конкретных показателей базовой системы (например, флагов ОС, загрузки процессора, общего объема свободной памяти, количества процессов и т. д.), поскольку Introscope использует API-интерфейс агента Java для всего остального.
Для 99% приложений «нативная» часть памяти (не-Java-часть) ничтожна по сравнению с Java-частью.
Но здесь, когда в нашу игру играет Introscope, вещистановятся другими, так как нативная часть может расти как угодно большой и использовать пространство памяти процесса до пределов.
Мы пришли к выводу, что эти системные значения не очень интересныжаль для нас - и я думаю, что это относится ко многим из вас, так как есть другие способы получить их: mem, free, top, taskmanager, ... - поэтому мы решили удалить его.Просто.
Я считаю, что это лучший вариант.
Попробуйте и скажите нам, если это решило ваши проблемы с памятью.