如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少?

jps

jinfo

jvm的参数类型:

1.标配参数:java -version  ,java -help , java -showversion

2.X参数(了解): java -Xint  (解释执行), java -Xcomp(第一次使用就编译成本地代码),-Xmixed (混合模式)

3.XX参数:

3.1 Boolean类型 ,公式:-XX:+或者-某个属性值,其中+表示开启,-表示关闭

例子:是否打印GC收集细节,是否使用串行垃圾回收器

public class HelloGC {
public static void main(String[ ]args) throws InterruptedException {
System.out.println("***********helloGC");
Thread.sleep(Integer.MAX_VALUE);
}
} 结果见下图:

可以进行修改

3.2 KV设值类型,默认元空间大小

默认多少极限年龄可以升养老区


两个经典参数:-Xms 和-Xmx

-Xms 等价于:-XX:InitialHeapSize

-Xmx 等价于:-XX:MaxHeapSize

-Xss  设置单个线程栈的大小,一般默认为512k~1024k,等价于 -XX:ThreadStackSize

-Xms128m  -Xmx4096m  -Xss1024k  -XX:MetaspaceSize=512m  -XX:+PrintCommandLineFlags

-XX:+PrintGCDetails  -XX:+UseSerialGC

第一种,查看参数盘点家底

jps

jinfo  -flag  具体参数  java进程编号

jinfo  -flags  java进程编号

第二种,查看参数盘点家底

java -XX:+PrintFlagsInitial   这个是初始的

java -XX:+PrintFlagsFinal  这个是修改以后的      =表示没有改过    :=表示人为修改或者jvm修改过的   公式:java -XX:+PrintFlagsFinal  -version

java -XX:+PrintCommandLineFlags  也是可以查看初始参数


public class MemDemo {

    public static void main(String[ ] args) {
long maxMemory = Runtime.getRuntime().maxMemory();
long totalMemory = Runtime.getRuntime().totalMemory();
System.out.println("-Xmx 最大分配内存 "+(maxMemory/(double)1024/1024)+"MB");
System.out.println("-Xms 初始分配内存 "+(totalMemory/(double)1024/1024)+"MB");
}
} 运行结果见下图:


OOM异常例子:

public class HelloGC {
public static void main(String[ ]args) throws InterruptedException {
System.out.println("***********helloGC");
     //创建50m大小空间,实际调整为10m
byte[] bytes= new byte[50*1024*1024]; }
}

日志分析总结:

1.GC前后的对比。

2.新生代占堆内存三分之一,老年代占堆内存三分之二,老年代回收不了将抛oom异常。


常用基础参数SurvivorRatio

-XX:SurvivorRatio  设置新生代中eden和S0/S1空间的比例,默认

-XX:SurvivorRatio=8, Eden:S0:S1=8:1:1


假如

-XX:SurvivorRatio=4, Eden:S0:S1=4:1:1

SurvivorRatio值就是设置eden区的比例占多少,S0/S1相同

public class HelloGC {
public static void main(String[ ]args) throws InterruptedException {
System.out.println("***********helloGC");
//byte[] bytes= new byte[50*1024*1024];
}
} 默认状态:8:1:1

加参数后:4:1:1


常用基础参数NewRatio

-XX:NewRatio

配置年轻代与老年代在堆结构的占比

-XX:NewRatio=2新生代占1,老年代2,年轻代占整个堆的1/3

假如

-XX:NewRatio=4新生代占1,老年代4,年轻代占整个堆的1/5

NewRatio值就是设置老年代的占比,剩下的1给新生代

用法跟上图配置一样。

查看JVM参数的更多相关文章

  1. 【java】之查看JVM参数的值

    查看JVM参数的值 可以根据java自带的jinfo命令: jinfo -flags pid 使用jmap可以查看某个Java进程中每个对象有多少个实例,占用多少内存,命令格式:jmap -histo ...

  2. JVM系列第12讲:JVM参数之查看JVM参数

    今天要说的是如何查看 JVM 中已经设置的参数,包括显示参数和隐式参数. 打印显式参数 -XX:+PrintVMOptions 该参数表示程序运行时,打印虚拟机接受到的命令行显式参数.我们用下面的命令 ...

  3. JDK工具(查看JVM参数、内存使用情况及分析等)

      在JDK的bin目录下有很多命令行工具: 我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一 ...

  4. Java虚拟机学习 - 查看JVM参数及值的命令行工具(6)

    查看JVM各个参数值方式 1. HotSpot vm中的各个globals.hpp文件  查看jvm初始的默认值及参数 globals.hpp globals_extension.hpp c1_glo ...

  5. 查看 JVM 参数的默认值

    查看初始默认值:-XX:+PrintFlagsInitial HuandeMacBook-Air:~ huanliu$ java -XX:+PrintFlagsInitial [Global flag ...

  6. weblogic基本目录介绍,位数查看,启动与发布项目,修改JVM参数,设置项目为默认项目

    这里的基本目录%base%表示安装目录,如我的目录为:E:/weblogic就是%base% 1.weblogic目录介绍 weblogic主要的目录介绍: 1.日志目录: 每个domain(域)都有 ...

  7. JVM探秘:jinfo查看JVM运行时参数

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 如何查看JVM运行时参数,对于线上JVM调优是很关键的,因为只有知道了当前使用的JVM ...

  8. JVM基础系列第14讲:JVM参数之GC日志配置

    说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...

  9. JVM基础系列第13讲:JVM参数之追踪类信息

    我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息. 为了方便演 ...

随机推荐

  1. H3C 静态路由实现路由备份和负载分担

  2. java 利用TCP上传文件

    从客户端上传到服务器端,其实本质上也就是复制! package july76net; //上传文件(文本) import java.io.BufferedReader; import java.io. ...

  3. mpvue的坑,持续更新-.-

    mpvue... 坑 怎么说呢,去github看一下,发现还是有很多问题没有解决... 不支持filter 亲,到现在还没有支持filter哦.只能用替代方法了,用computed或者渲染前先处理数据 ...

  4. Sublime Text 安装中文、英文字体

    在 Sublimte Text 如何使用默认的字体,英文好看,但是中文不好,所以我就找了一个支持中文英文的字体 YaHei Consolas Hybrid 这个字体看起来效果比较差 下载地址: 如果无 ...

  5. PHP mysql扩展整理,操作数据库的实现过程分析

    相关文章:PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理   PHPmysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理 从某种程度上 ...

  6. 开源项目使用 appveyor 自动构建

    我写了几个开源项目,我想要有小伙伴提交的时候自动运行单元测试,自动运行编译,这样可以保证小伙伴提交清真的代码 本文将会告诉大家如何接入 appveyor 自动构建方案,在 Github 上给自己的开源 ...

  7. 2018-8-10-win10-uwp-按下等待按钮

    title author date CreateTime categories win10 uwp 按下等待按钮 lindexi 2018-08-10 19:16:50 +0800 2018-2-13 ...

  8. 微软软件开发技术二十年回顾-MFC篇

    三. MFC篇 Windows API是面向过程的接口,因此对于当时的编程技术来说,它是完美无缺的.但是,随着人们逐渐使用C++进行Windows程序的开发,迫切需要建立与Windows API的面向 ...

  9. Java 学习笔记(9)——java常用类

    之前将Java的大部分语法都回顾完了,后面添加一些常见的操作,基础语法就结束了.至于在这里再次提到常用类是由于有一部分体现在使用它的继承类或者接口之类的.这些需要有面向对象编程的基础 Object类 ...

  10. asdf

    [root@host01 ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 3 CL ...