JVM调优的参数在哪里可以进行设置(不是指临时的)

WAR包部署在Tomcat中时,可以通过设置JVM调优参数来提升性能。以下是一些常用的JVM调优参数:

  1. -Xms: 设置JVM的初始堆大小,例如 -Xms512m 表示初始堆大小为512MB。
  2. -Xmx: 设置JVM的最大堆大小,例如 -Xmx1024m 表示最大堆大小为1GB。

            堆空间设置多少大小合适?

                最大大小的默认值是物理内存的1/4,初始大小是物理内存的1/64

               堆太小,可能会频繁的导致年轻代和老年代的垃圾回收,会产生stw,暂停用户线程

  1. -XX:MaxPermSize: 设置永久代的最大大小,例如 -XX:MaxPermSize=256m 表示最大永久代大小为256MB。在JDK8及以上版本中,PermGen被Metaspace取代,该参数不再生效。
  2. -XX:MetaspaceSize: 设置Metaspace的初始大小,例如 -XX:MetaspaceSize=128m 表示初始Metaspace大小为128MB。
  3. -XX:MaxMetaspaceSize: 设置Metaspace的最大大小,例如 -XX:MaxMetaspaceSize=256m 表示最大Metaspace大小为256MB。
  4. -XX:NewSize: 设置年轻代的初始大小,例如 -XX:NewSize=256m 表示初始年轻代大小为256MB。
  5. -XX:MaxNewSize: 设置年轻代的最大大小,例如 -XX:MaxNewSize=512m 表示最大年轻代大小为512MB。
  6. -XX:SurvivorRatio: 设置年轻代中Eden区和Survivor区的大小比例,例如 -XX:SurvivorRatio=8 表示Eden区和Survivor区为8:1的比例。
  7. -XX:ParallelGCThreads: 设置并行垃圾回收的线程数,例如 -XX:ParallelGCThreads=4 表示使用4个线程进行并行垃圾回收。
  8. -XX:+UseConcMarkSweepGC: 开启并发标记清除垃圾回收器。
  9. -XX:+UseG1GC: 开启G1垃圾回收器。
  10. -Xss: 虚拟机栈的设置   例如,-Xss128k  每个线程默认会开启1M的内存
  11. -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调优工具有哪些

  1. 命令行工具

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命令的输出选项,用于显示主类的完整路径。

  1. 可视化工具
  • 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调优和性能优化中。

 

你可能感兴趣的:(jvm)