Например, машина часто выдает аварийные сигналы FullGC, как определить причину?
Общее явление заключается в том, что загрузка ЦП резко возрастает, RT увеличивается, и, вероятно, произойдет OOM. При столкновении с этим явлением, как определить местонахождение:
Jmap
Вывести сводную информацию о куче, используемый алгоритм GC, конфигурацию кучи (кучи) и использование памяти кучи JVM.
jmap -heap pid
Распечатайте количество экземпляров каждого класса следа памяти, введите информацию о полном имени, начало внутреннего класса имя VM добавит количество префикс объектов «*». Если подпунктер плюс живой, просто живая статистика Отказ
jmap -histo:live pid
Вывод содержимого кучи jvm в файл.Подпараметр live является необязательным.Если параметр live указан, в файл выводятся только живые объекты.
jmap -dump:live,format=b,file=myjmapfile.txt pid
finalizerinfo выводит информацию об объектах, ожидающих переработки
jmap -finalizerinfo pid
arthas
Просмотр текущего состояния памяти кучи процесса jvm
dashboard
Метод в системе наблюдения, значение атрибута и текущее состояние критического объекта.
# watch 类全路径 方法名 '属性或者方法的全路径引用'
watch demo.MathGame primeFactors 'target.illegalArgumentCount'
# 观察方法的第一个参数值
watch demo.MathGame primeFactors params[0]
анализ файла jmap
Автономный анализ команд
jhat <heap-dump-file>
Загрузите JVisuvm, не забудьте выбрать HPROF при загрузке, есть несколько разных вариантов, приложений, HPROF
предположение
- Используйте неограниченные очереди в коде, такие как LinkedBlockingQuene, вы должны обратить внимание, лучше всего установить ограничение длины
- Когда ThreadLocal израсходован, не забудьте удалить объект