Мониторинг использования кучи с помощью jstack
Я знаю, что этот вопрос задавали много, но я не смог найти надежного способа интерпретации вывода jstat для мониторинга. Я пытаюсь написать монитор кучи Kava в Bash для развертывания в Linux. Я не могу включить какой-либо сторонний код, поэтому jvmtop не вариант. Я также не являюсь экспертом в программировании на Java, поэтому, хотя я знаю, что нечто подобное можно сделать в нескольких строках Java-кода с использованием JMX, я не знаю, как это сделать. Я пытаюсь использовать вывод jstat, чтобы получить общий размер кучи и использование кучи, чтобы я мог предупредить, если приложение столкнется с проблемами OOM. Пока это то, что у меня есть:
- Бежать
/usr/java/bin/jstat -gc
и сложитьS0U
,S1U
,EU
а такжеOU
чтобы получить использование кучи. Бежать
/usr/java/bin/jstat -gccapacity
и сложитьNGCMX
а такжеOGCMX
чтобы получить кучу емкости.Однако, несмотря на то, что приложение работает с OOM, загрузка показывает 70-80%, поэтому это не должно быть точным. Я пытался включить статистику GC, чтобы понять использование кучи, но я не знаю, что в ней содержится.
2018-07-31T08:16:49.087-0400: 8063.483: [Full GC [PSYoungGen: 0K->0K(1286016K)] [ParOldGen: 1382807K->1335278K(1683840K)] 1382807K->1335278K(2969856K) [PSPermGen: 55666K->55460K(61568K)], 29.7283550 secs] [Times: user=117.08 sys=0.00, re
al=29.73 secs]
java.lang.OutOfMemoryError: Java heap space
У нас есть 4 Гб, назначенные для кучи
Есть ли надежный способ рассчитать использование кучи с помощью jstat или любого другого инструмента, уже развернутого с JRE?