Java JVM参数设置及日志查看
mc jvm参数

mc jvm参数Java虚拟机(JVM)参数是用于配置Java应用程序运行时行为的参数。
这些参数提供了对垃圾收集器、内存管理、JIT编译器和JVM诊断工具的定制控制。
下面是一些常用的JVM参数:-Xms:这个参数用于设置JVM启动时分配的初始堆内存大小。
例如,-Xms512m 将分配512MB的初始堆内存。
-Xmx:这个参数用于设置JVM可以使用的最大堆内存大小。
例如,-Xmx1g将限制堆内存使用量为1GB。
-XX:NewRatio:这个参数用于设置老年代和新生代的比例。
例如,-XX:NewRatio=3将使老年代与新生代的比例为3:1。
-XX:SurvivorRatio:这个参数用于设置新生代中Eden区与Survivor区的比例。
例如,-XX:SurvivorRatio=8将使Eden区与Survivor区的比例为8:1。
-XX:MaxPermSize:这个参数用于设置永久代的最大大小。
需要注意的是,这个参数仅在某些较旧的Java版本中使用,而在Java 8及更高版本中已经被-XX:MaxMetaspaceSize替代。
-XX:+UseConcMarkSweepGC:这个参数启用CMS垃圾收集器,以降低停顿时间。
-XX:+PrintGCDetails:这个参数用于打印详细的垃圾收集日志,以便于分析和调试。
-XX:+HeapDumpOnOutOfMemoryError:这个参数在发生OutOfMemoryError时生成堆转储,有助于分析内存泄漏问题。
这些参数可以帮助你根据应用程序的需求和硬件配置来优化JVM的性能。
请注意,根据你使用的Java版本和具体的硬件配置,可用的参数可能会有所不同。
因此,建议查阅相关文档或使用java -XX:+PrintFlagsFinal命令来查看所有可用的JVM参数及其当前值。
JVM常用指标查询

JVM常⽤指标查询⼀.what‘s going on in Java Application 当系统卡顿,应⽤莫名被杀掉,我们应该怎么排查?在我已知的系统挂掉的情况,只经历过两种:1.内存申请不了(OOM);2.CPU占⽤过⾼ 使⽤top命令即可以观察linux的进程信息,以及CPU占⽤信息,拿到了进程号就可以进⼀步了解进程信息。
netstat -apn | grep35011 即可观察java应⽤所监听的端⼝。
如果机⼦上配置了Java环境,则使⽤jps命令即可看到Java进程号。
通常我最常⽤是jps -ml 可显⽰给主函数传⼊的参数,并显⽰主类的完整包名。
可以查询启动Java进程时候jvm的参数,使⽤jps -v 可以看到⼀些收集器的配置(以上是使⽤CMS),Java堆的内存配置,等等。
注意⾥⾯有⼀个参数,HeapDumpOnOutofMemmoryError,这个参数说明JVM在检测到内存溢出的时候会输出⼀个内存快照,并输出到后⾯这个dumpPath中。
内存溢出有两种情况,⼀种是到达JVM设置的最⼤内存,⽽这个时候并没有到达Linux系统内存瓶颈,这个时候应该是不会把Java杀掉(猜测);另⼀种是造成了Linux系统内存申请问题,则Linux会杀掉这个异常进程(Linux Kernel OOM(Out of memory killer))。
如果想从linux层⾯查看进程,则进⼊⽂件夹;Linux的进程是以⽂件形式记录的,也就是fd的概念。
/proc/{pid}/statuslinux⽇志⽂件说明 (抄过来的)/var/log/message 系统启动后的信息和错误⽇志,是Red Hat Linux中最常⽤的⽇志之⼀/var/log/secure 安全相关的⽇志信息/var/log/maillog 邮件相关的⽇志信息/var/log/cron 定时任务相关的⽇志信息/var/log/spooler UUCP和news设备相关的⽇志信息/var/log/boot.log 守护进程启动和停⽌相关的⽇志消息/var/log/wtmp 该⽇志⽂件永久记录每个⽤户登录、注销及系统的启动、停机的事件 有⼀次查询OOM挂掉的应⽤信息,在阿⾥云监控⾥内存下来的那个时间点,去查message,看到了Linux的OOM kill的⽇志。
Java虚拟机JVM各调优参数说明

Java虚拟机JVM各调优参数说明Java虚拟机(JVM)是Java程序运行的环境,它负责将Java源代码编译为字节码,并在运行时执行这些字节码。
JVM的性能对于Java应用程序的性能至关重要。
为了优化JVM的性能,我们可以通过调整一些参数来改变其行为。
下面是JVM各调优参数的详细说明。
1. -Xms和-Xmx:这两个参数用于设置JVM的初始堆大小和最大堆大小。
初始堆大小表示JVM在启动时申请的内存大小,最大堆大小表示JVM所能申请的最大内存大小。
可以使用以下命令设置初始堆大小为1GB,最大堆大小为2GB:-Xms1g -Xmx2g。
2. -XX:NewSize和-XX:MaxNewSize:这两个参数用于设置新生代的初始大小和最大大小。
新生代是JVM堆的一部分,用于存放新创建的对象。
可以使用以下命令设置新生代的初始大小为256MB,最大大小为512MB:-XX:NewSize=256m -XX:MaxNewSize=512m。
3. -XX:SurvivorRatio:这个参数用于设置新生代中Eden区和Survivor区的比例。
Eden区是新对象的分配区域,Survivor区是用于存放幸存的对象的区域。
可以使用以下命令设置Eden区和Survivor区的比例为8:1:-XX:SurvivorRatio=84. -XX:MaxTenuringThreshold:这个参数用于设置对象在Survivor区中的最大年龄。
当对象在Survivor区中存活的时间超过这个阈值时,它将被晋升到老年代。
可以使用以下命令设置最大年龄为15:-XX:MaxTenuringThreshold=155. -XX:PermSize和-XX:MaxPermSize:这两个参数用于设置永久代的初始大小和最大大小。
永久代用于存放类的元数据、静态变量和常量池等信息。
可以使用以下命令设置永久代的初始大小为128MB,最大大小为256MB:-XX:PermSize=128m -XX:MaxPermSize=256m。
java jvm参数

java jvm参数
Java 虚拟机(JVM)参数是用来配置 Java 虚拟机运行时环境的一组参数。
它们可以用来控制 JVM 的内存使用情况,调整垃圾回收器的行为,debugging,启用额外的错误检查等等。
1、-Xms:设置JVM初始内存大小,默认是物理内存的1/64。
2、-Xmx:设置JVM最大可用内存大小,一般设置为物理内存的1/4或1/8。
3、-Xss:设置JVM单个线程栈内存大小,通常为
512K到1024K之间。
4、-XX:+UseSerialGC:开启串行垃圾收集器,使用单线程工作,可以提高性能,但是应用程序也会受到影响。
5、-XX:+PrintGCDetails:打印出垃圾回收的详细信息,方便进行性能调优。
6、-XX:MaxPermSize:设置持久代的最大内存大小,默认情况下,持久代的内存大小取决于MaxHeapSize的值。
7、-XX:NewRatio:设置新生代和老年代的比例,默认情况下是2,即新生代是老年代的一半。
8、-XX:SurvivorRatio:设置Eden区和Survivor区的比例,默认情况下是8,即Eden区是Survivor区的八分之一。
jvm debug 参数

jvm debug 参数JVM是Java虚拟机的缩写。
JVM起着Java程序的运行环境之作用,因此JVM的性能直接影响程序运行的效率。
在开发Java应用程序的过程中,当出现异常情况时,需要借助JVM的debug参数来进行程序的调试和故障排查。
下面我们来详细了解一下JVM debug参数的使用方法。
第一步:开启JVM debug模式在Tomcat这样的应用程序中,我们可以在启动的时候通过设置JAVA_OPTS参数来开启JVM debug模式。
具体操作方法如下:1. 进入Tomcat安装目录中的bin目录,找到catalina.bat文件(Windows系统)或catalina.sh文件(Linux系统)。
2. 打开文件,找到JAVA_OPTS参数,修改为如下参数:JAVA_OPTS="-server -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx1024m -Xdebug -Xrunjdwp:transport=dt_socket,address=8080,server=y,suspend=n"以上参数中,“transport=dt_socket”表示调试连接的通信协议,“address=8080”表示调试连接的端口号,“server=y”表示开启服务器模式,允许多个调试连接,“suspend=n”表示不在启动时暂停Tomcat服务。
3. 保存文件并退出。
接下来重新启动Tomcat服务即可。
第二步:使用JVM debug参数调试应用程序当程序出现异常情况时,我们需要借助JVM debug参数来进行调试。
下面是具体操作步骤:1. 打开Eclipse或IntelliJ IDEA等集成开发环境,在调试模式下启动我们的应用程序。
同时,在Eclipse的Debug菜单中选择“Remote Java Application”项。
2. 在弹出的“Remote Java Application”对话框中填写连接参数。
java jvm参数配置方法

一、概述在Java编程中,JVM(Java虚拟机)参数配置是非常重要的一环,它能够对Java应用程序的性能和行为产生重大影响。
通过合理配置JVM 参数,可以提高Java应用程序的运行效率和稳定性,从而更好地满足需求。
本文将介绍Java JVM参数配置的方法,包括常用的参数选项和配置方式。
二、参数类型JVM参数可以分为两类:标准参数和非标准参数。
标准参数是被所有的JVM实现所支持的参数,用于控制JVM的运行方式,例如内存大小、垃圾回收器的选择等。
非标准参数则是被某个特定的JVM实现所支持的参数,通常用于调试和诊断。
三、常用的标准参数1. -Xms和-Xmx:分别用于指定JVM的初始内存和最大内存。
-Xms512m表示JVM启动时分配的初始内存为512MB,-Xmx1024m表示JVM分配的最大内存为1GB。
2. -XX:NewSize和-XX:MaxNewSize:用于指定新生代内存的初始大小和最大大小。
3. -XX:PermSize和-XX:MaxPermSize:用于指定永久代内存的初始大小和最大大小(仅适用于JDK1.7以前的版本,JDK1.8之后永久代已被元空间(Metaspace)取代)。
4. -XX:+UseParallelGC:启用并行垃圾回收器。
5. -XX:+UseConcMarkSweepGC:启用CMS垃圾回收器。
四、配置方式1. 命令行参数配置:可以通过在启动Java应用程序时添加参数来配置JVM参数。
例如:java -Xms512m -Xmx1024m -jar myapp.jar2. 环境变量配置:可以通过设置环境变量来配置JVM参数。
在Windows系统中,可以在系统属性中设置JAVA_OPTS环境变量,然后在该环境变量中添加JVM参数。
3. 配置文件配置:可以在JVM的配置文件中(如jvm.options、java.conf等)添加相应的参数配置。
这种方式适用于需要频繁修改参数的情况。
JVM参数查看与设置

JVM参数查看与设置1 JVM内存管理的机制1.1 堆(Heap)和⾮堆(Non-heap)内存按照官⽅的说法:“Java 虚拟机具有⼀个堆,堆是运⾏时数据区域,所有类实例和数组的内存均从此处分配。
堆是在 Java 虚拟机启动时创建的。
”“在JVM中堆之外的内存称为⾮堆内存(Non-heap memory)”。
可以看出JVM主要管理两种类型的内存:堆和⾮堆。
简单来说堆就是Java代码可及的内存,是留给开发⼈员使⽤的;⾮堆就是JVM留给⾃⼰⽤的,所以⽅法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运⾏时常数池、字段和⽅法数据)以及⽅法和构造⽅法的代码都在⾮堆内存中。
1.1.1 堆内存分配JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最⼤分配的堆内存由-Xmx指定,默认是物理内存的1/4。
默认空余堆内存⼩于40%时,JVM就会增⼤堆直到-Xmx的最⼤限制;空余堆内存⼤于70%时,JVM会减少堆直到-Xms的最⼩限制。
因此服务器⼀般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的⼤⼩。
说明:如果-Xmx 不指定或者指定偏⼩,应⽤可能会导致ng.OutOfMemory错误,此错误来⾃JVM,不是Throwable的,⽆法⽤try...catch捕捉。
1.1.2 ⾮堆内存分配JVM使⽤-XX:PermSize设置⾮堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最⼤⾮堆内存的⼤⼩,默认是物理内存的1/4。
(还有⼀说:MaxPermSize缺省值和-server -client选项相关,-server选项下默认MaxPermSize为64m,-client选项下默认MaxPermSize为32m。
上⾯错误信息中的PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。
设置JVM参数,查看堆大小

设置JVM参数,查看堆⼤⼩1.在eclipse设置JVM参数打开eclipse-窗⼝-⾸选项-Java-已安装的JRE(对在当前开发环境中运⾏的java程序皆⽣效,也就是在eclipse中运⾏的java程序)编辑当前使⽤的JRE,在缺省VM参数中输⼊:-Xmx1024m -Xms1024m -Xmn256m -Xss16m或者在运⾏⼀个java程序的时候执⾏:java -Xmx1024m -Xms1024m -Xmn256m -Xss16m TestTest是⼀个class⽂件。
2. 在Tomcat服务器上设置JVM参数set CATALINA_OPTS=-Xmx512m -Xms512m -Xmn64m -Xss2m或者set JAVA_OPTS=-Xmx512m -Xms512m -Xmn64m -Xss2m设置CATALINA_OPTS 和 JAVA_OPTS都是⼀个道理,在启动tomcat的时候设置参数。
两者区别是JAVA_OPTS在tomcat停⽌的时候也会执⾏这个命令。
注意:Tomcat分为安装版(*.exe)和⾮安装版或者解压版(*.zip),个⼈还是⽐较喜欢解压版。
两者虽然在功能上没有什么区别,但是在设置上还是有要注意的地⽅。
这⾥只谈JVM设置要注意的地⽅。
安装版:windows的服务会有⼀个tomcat服务,当启动服务的时候Tomcat会从注册表读取JVM的参数。
也就是说当在tomcat的lib⽂件夹下catalina.bat或者startup.bat中设置JVM参数是⽆效的。
解决办法:设置tomcat的注册表;或者使⽤startup.bat启动tomcat。
解压版:当点击startup.bat时,它会读取catalina.bat中的配置,不管在startup.bat⽂件还是在catalina.bat⽂件中设置JVM参数,都会读取JVM参数。
3. 查看堆的⼤⼩在程序中查看,返回值单位是字节,当然还有其他JVM参数可以查看。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基础知识-Java JVM参数设置及日志查看JVM内存参数-Xms:初始堆大小;默认值为物理内存的1/64(<1GB),默认(MinHeapFreeRatio 参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制。
-Xmx:最大堆大小;默认值为物理内存的1/4(<1GB) 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制-Xmn:年轻代大小(1.4or lator);注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。
整个堆大小=年轻代大小+ 年老代大小+ 持久代大小。
增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8-XX:NewSize:设置年轻代大小(for 1.3/1.4)-XX:MaxNewSize:年轻代最大值(for 1.3/1.4)-XX:PermSize:设置持久代(perm gen)初始值物理内存的1/64-XX:MaxPermSize:设置持久代最大值;默认值为物理内存的1/4。
注意IBM的JDK设置此参数无效。
-Xss:每个线程的堆栈大小;JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
一般小的应用,如果栈不是很深,应该是128k够用的大的应用建议使用256k。
这个选项对性能影响比较大,需要严格的选择。
-XX:ThreadStackSize:Thread Stack Size;(0 means use default stack size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.],此值设置和-Xss设置相似,目前较多使用-Xss。
-XX:NewRatio:年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 当Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。
-XX:SurvivorRatio:Eden区与Survivor区的大小比值;设置为8,则两个Survivor 区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10-XX:LargePageSizeInBytes:内存页的大小不可设置过大,会影响Perm的大小,默认为128m-XX:+UseFastAccessorMethods:原始类型的快速优化-XX:+DisableExplicitGC:关闭System.gc();这个参数谨慎使用。
-XX:MaxTenuringThreshold:垃圾最大年龄;如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率,该参数只有在串行GC时才有效。
-XX:+AggressiveOpts:加快编译-XX:+UseBiasedLocking:锁机制的性能改善-Xnoclassgc:禁用垃圾回收-XX:SoftRefLRUPolicyMSPerMB:每兆堆空闲空间中SoftReference的存活时间,默认为1s。
-XX:PretenureSizeThreshold:对象超过多大是直接在旧生代分配;默认值为0;单位字节新生代采用Parallel Scavenge GC时无效,另一种直接在旧生代分配的情况是大的数组对象,且数组中无外部引用对象.-XX:TLABWasteTargetPercent:TLAB占eden区的百分比,默认值为1%-XX:+CollectGen0First:FullGC时是否先YGC;默认值falseJVM的性能调优对于GC的性能主要有2个方面的指标:吞吐量throughput(工作时间不算gc 的时间占总的时间比)和暂停pause(gc发生时app对外显示的无法响应)。
1. Total Heap默认情况下,vm会增加/减少heap大小以维持free space在整个vm中占的比例,这个比例由MinHeapFreeRatio和MaxHeapFreeRatio指定。
一般而言,server端的app会有以下规则:对vm分配尽可能多的memory;将Xms和Xmx设为一样的值。
如果虚拟机启动时设置使用的内存比较小,这个时候又需要初始化很多对象,虚拟机就必须重复地增加内存。
处理器核数增加,内存也跟着增大。
2. The Young Generation另外一个对于app流畅性运行影响的因素是young generation的大小。
young generation越大,minor collection越少;但是在固定heap size情况下,更大的young generation就意味着小的tenured generation,就意味着更多的major collection(major collection会引发minor collection)。
NewRatio反映的是young和tenured generation的大小比例。
NewSize和MaxNewSize反映的是young generation大小的下限和上限,将这两个值设为一样就固定了young generation的大小(同Xms和Xmx设为一样)。
如果希望,SurvivorRatio也可以优化survivor的大小,不过这对于性能的影响不是很大。
SurvivorRatio是eden和survior大小比例。
一般而言,server端的app会有以下规则:首先决定能分配给vm的最大的heap size,然后设定最佳的young generation的大小;如果heap size固定后,增加young generation的大小意味着减小tenured generation大小。
让tenured generation在任何时候够大,能够容纳所有live的data(留10%-20%的空余)。
3. 垃圾回收时promotion failed问题一般可能是两种原因产生,第一个原因是survivor space空间不够,survivor space 空间里的对象还不应该被移动到年老代,但年轻代又有很多对象需要放入survivor space;第二个原因是年老代没有足够的空间接纳来自年轻代的对象;这两种情况都会转向Full GC,会导致网站停顿时间较长。
解决方方案一:第一个原因的解决办法是可以去掉survivor space,设置-XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0即可。
注意:因为没有用到survivor space,所以年老代容易满,CMS执行会比较频繁。
如果把survivor space加大,这样也不会有promotion failed。
64位系统只要配置MaxTenuringThreshold参数,CMS还是有暂停。
为了解决暂停问题和promotion failed问题,参考可以设置-XX:SurvivorRatio=1 ,并把MaxTenuringThreshold参数不设置,这样即不会暂停又不会有promotoin failed,而且更重要的是,好多对象到不了年老代就被回收了,所以年老代和永久代上升非常慢,因此CMS执行频率非常低。
参数设置参考:-Xmx4000M -Xms4000M -Xmn600M -XX:PermSize=500M -XX:MaxPermSize=500M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.logCMSInitiatingOccupancyFraction值与Xmn的关系公式如上介绍了promontion faild产生的原因是EDEN空间不足的情况下将EDEN与From survivor中的存活对象存入To survivor区时,To survivor区的空间不足,再次晋升到old gen区,而old gen区内存也不够的情况下产生了promontion faild从而导致full gc.那可以推断出:eden+from survivor < old gen区剩余内存时,不会出现promontion faild的情况,即:(Xmx-Xmn)*(1-CMSInitiatingOccupancyFraction/100)>=(Xmn-Xmn/(SurvivorRatior+2) ) 进而推断出:CMSInitiatingOccupancyFraction<=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100例如:当xmx=128 xmn=36 SurvivorRatior=1时CMSInitiatingOccupancyFraction<=((128.0-36)-(36-36/(1+2)))/(128-36)*100 =73.913当xmx=128 xmn=24 SurvivorRatior=1时CMSInitiatingOccupancyFraction<=((128.0-24)-(24-24/(1+2)))/(128-24)*100=84.615…当xmx=3000 xmn=600 SurvivorRatior=1时CMSInitiatingOccupancyFraction<=((3000.0-600)-(600-600/(1+2)))/(3000-600)*1 00=83.33CMSInitiatingOccupancyFraction低于70% 需要调整xmn或SurvivorRatior值。