WAR包部署在Tomcat中时,可以通过设置JVM调优参数来提升性能。以下是一些常用的JVM调优参数:
- -Xms: 设置JVM的初始堆大小,例如 -Xms512m 表示初始堆大小为512MB。
- -Xmx: 设置JVM的最大堆大小,例如 -Xmx1024m 表示最大堆大小为1GB。
? ? ? ? ? ? 堆空间设置多少大小合适?
? ? ? ? ? ? ? ? 最大大小的默认值是物理内存的1/4,初始大小是物理内存的1/64
? ? ? ? ? ? ? ?堆太小,可能会频繁的导致年轻代和老年代的垃圾回收,会产生stw,暂停用户线程
- -XX:MaxPermSize: 设置永久代的最大大小,例如 -XX:MaxPermSize=256m 表示最大永久代大小为256MB。在JDK8及以上版本中,PermGen被Metaspace取代,该参数不再生效。
- -XX:MetaspaceSize: 设置Metaspace的初始大小,例如 -XX:MetaspaceSize=128m 表示初始Metaspace大小为128MB。
- -XX:MaxMetaspaceSize: 设置Metaspace的最大大小,例如 -XX:MaxMetaspaceSize=256m 表示最大Metaspace大小为256MB。
- -XX:NewSize: 设置年轻代的初始大小,例如 -XX:NewSize=256m 表示初始年轻代大小为256MB。
- -XX:MaxNewSize: 设置年轻代的最大大小,例如 -XX:MaxNewSize=512m 表示最大年轻代大小为512MB。
- -XX:SurvivorRatio: 设置年轻代中Eden区和Survivor区的大小比例,例如 -XX:SurvivorRatio=8 表示Eden区和Survivor区为8:1的比例。
- -XX:ParallelGCThreads: 设置并行垃圾回收的线程数,例如 -XX:ParallelGCThreads=4 表示使用4个线程进行并行垃圾回收。
- -XX:+UseConcMarkSweepGC: 开启并发标记清除垃圾回收器。
- -XX:+UseG1GC: 开启G1垃圾回收器。
- -Xss: 虚拟机栈的设置? ?例如,-Xss128k? 每个线程默认会开启1M的内存
- -XX:MaxTenuringThreshold=threshold? 设置年轻代晋升老年代的阈值? 默认为15,? 取值范围为0-15
在Tomcat的bin目录下的catalina.sh(Linux/MacOS)或catalina.bat(Windows)文件中,可以找到JAVA_OPTS变量,使用该变量可以设置JVM调优参数。例如:
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:ParallelGCThreads=4"
二.jar包部署在启动参数设置jvm调优的参数
nohup java -Xms512m -Xmx1024m -jar xxxx.jar --spring.profiles.active=prod &
这段代码是在Unix/Linux系统下运行一个Java应用程序的命令。
nohup
命令表示不挂断地运行命令,即使用户退出登录或断开终端连接,命令仍然会继续运行。java
表示要运行的是Java语言的程序。-Xms512m
和-Xmx1024m
是Java虚拟机的启动参数,分别表示设置Java堆的初始大小为512MB和最大大小为1024MB。-jar xxxx.jar
表示要执行的Java程序的JAR包文件名。--spring.profiles.active=prod
是传递给Java程序的命令行参数,用于设置Spring框架的活跃配置文件为"prod"。&
表示把命令放到后台运行。
这段代码的作用是启动一个Java程序,并使用指定的内存配置、配置文件等参数来运行。使用nohup
命令可以确保即使终端连接断开,该程序也能继续在后台运行。
JVM调优工具有哪些
- 命令行工具
jstat:
jstat -gcutil 1234 1000 10
这个命令将监控进程ID为1234的JVM进程的垃圾回收情况。每隔1000毫秒(1秒)输出一次,总共输出10次。
jmap:
jmap -dump:format=b,file=heap.bin 1234
这个命令将生成进程ID为1234的JVM进程的堆内存快照,并保存为名为heap.bin的文件。
jstack:
jstack 1234
这个命令将生成进程ID为1234的JVM进程的线程快照。
jconsole:
jconsole
这个命令将打开一个图形化界面,用于实时监控JVM的内存、线程、类加载等信息,并进行相关操作。
jhat:
jhat -J-Xmx2g heap.bin
这个命令将分析名为heap.bin的堆内存快照。
jps:
jps -l
这个命令将列出所有Java进程的进程ID和主类的完整路径。
对于命令中的参数说明:
- 1234:表示JVM进程的进程ID。
- -gcutil:表示jstat命令的输出选项,用于监控垃圾回收情况。
- 1000:表示jstat命令的输出间隔时间,单位为毫秒。
- 10:表示jstat命令的输出次数。
- -dump:format=b,file=heap.bin:表示jmap命令的输出选项,用于生成堆内存快照,并将快照保存为名为heap.bin的文件。
- -J-Xmx2g:表示jhat命令的JVM参数,用于指定jhat命令的堆内存大小为2GB。
- -l:表示jps命令的输出选项,用于显示主类的完整路径。
- 可视化工具
- VisualVM:提供了图形化界面,可以进行实时监控、性能分析和故障排查等操作。它支持通过插件扩展,可以安装各种插件进行更多的监控和分析功能。(jdk8专属)
- Java Mission Control (JMC):是Oracle提供的一个可视化工具套件,包括JVM测量工具(JVM Tool Interface,JVM TI)、Flight Recorder和JMC Console等。它提供了强大的监控和分析能力,能够对JVM进行全方位的性能分析和故障排查。
- Eclipse Memory Analyzer (MAT):专注于分析Java堆内存快照,可以帮助检测内存泄漏、分析内存使用情况和查找对象引用关系等问题。
- YourKit Java Profiler:是一款商业化的JVM性能分析工具,提供了实时的内存和CPU使用情况监控、线程和锁分析、内存泄漏检测等功能。它易于使用且功能强大,被广泛应用于JVM调优和性能优化中。
?