Основой для запуска java на нескольких платформах является виртуальная машина java.Мы не будем здесь говорить о ее области памяти.В конце концов, есть разница между областью методов jdk7 и метапространством jdk8.
JVM-параметры
//常见参数
-Xms1024m 初始堆大小
-Xmx1024m 最大堆大小 一般将xms和xmx设置为相同大小,防止堆扩展,影响性能。
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置持久代大小
-XX:+HeapDumpOnOutOfMemoryError OOM时自动保存堆文件,可以用visualvm分析堆文件
//收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
//垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
//并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数.并行收集//线程数.
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比.公式为1/(1+n)
//并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式.适用于单CPU情况.
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数.并行收集线程数.
Применение
Использование идеи
- открытая идея
- Нажмите в правом верхнем углу
edit configurations - Введите параметры в vm options
Использование Springboot
Поскольку автор использует Springboot, вот демонстрация в виде Springboot, добавляющего параметры при запуске jar-пакета проекта.
java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar
использование инструмента
Visual VM
Visual VM написан на языке java и интегрирован с помощью jdk. Он помогает нам анализировать использование памяти, обнаруживая информацию о классах и объектах, загруженных в JVM. Это мощный инструмент для анализа и настройки проектов Java.
概述: показывает параметры jvm проекта.При чем тут запрет? Я считаю, что зрители в зале прямого эфира должны быть мудрыми!
监视: {} Временно пропустить n слов.线程: {} Временно пропустить n слов.抽样器: {} Временно пропустить n слов.
jstat
1. Просмотр PID процесса проекта
- Автор использует докер для развертывания проекта Springboot, поэтому нужно только
topилиjpsВы можете напрямую просматривать Pid. -
lsof -i:端口号, при условии, что он у вас установлен. ps -ef | grep 项目名
2. Используйте команду для просмотра результатов
jstat -gcutil 5 1000
Фактический анализ
- Через Visual VM установлено, что в основном каждые 8 минут в jvm будет происходить GC, а сам я проект не посещал, и объем доступа проекта должен быть равен 0, поэтому при отсутствии задач по времени или бесконечности циклы, количество сгенерированных объектов должно быть равно 0. Теоретически GC не происходит.
- Так где же происходит GC? Молодой или старый?
Потому что здесьNewRatioЭто 1, поэтому, будь то старое поколение или новое поколение, GC обычно составляет около 200 м, и нам трудно различить, какое это поколение. На самом деле, преждеNewRatio=2,xmx450m, случай, когда происходит GC, составляет 150 м. Следовательно, РЖ возникает в новом поколении. - Если не верите, вот скриншот jstat, видно, что постоянно генерируются объекты нового поколения.
jhatС помощью этого инструмента файл может быть сгенерирован Visual VM, и, конечно же, в случае OOM он также может быть сгенерирован по параметрам.
jhat -J-Xmx1024M file
Вы должны быть в состоянии найти его, проанализировав дамп кучи.Мы не будем анализировать его здесь.На самом деле более хлопотно перезапустить проект,промапить несколько портов,а затем дождаться сборщика мусора. Чтобы быть ближе к реальности, этот проект является реальным проектом и был развернут в облаке Alibaba.Ссылка здесь, поразите меня сильно, код взят с github.
Эпилог
Наконец, я желаю всем счастливого нового года и найти хорошую работу. Я надеюсь, что Сяочжи сможет выиграть чемпионат. Я наблюдал за этим более десяти лет. Он осуществит мечту старого игрока.