如何查看一个正在运行中的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. python面向对象之三大特性

    继承 先看个简单的例子了解一下继承. class Animal: # 父类 def __init__(self, name, age, department): self.name = name se ...

  2. CSS 实现单行及多行文字省略

    单行文字省略 很多时候不确定字数限制,但换行可能影响整体设计,这个时候常用就是文字省略加全文字提示了 .dom{ text-overflow: ellipsis; overflow: hidden; ...

  3. Vue打包文件放在服务器,浏览器存在缓存问题的解决

    在入口文件index.html添加 <meta http-equiv="pragram" content="no-cache"> <meta ...

  4. P1011 圆柱体的表面积

    题目描述 输入底面半径 \(r\) 和高 \(h\) ,输出圆柱体的表面积,保留 \(3\) 位小数. 输入格式 输入包含两个实数 \(r,h(1 \le r,h \le 1000)\) 且保证输入的 ...

  5. Roslyn 使用 Directory.Build.props 管理多个项目配置

    在一些大项目需要很多独立的仓库来做,每个仓库之间都会有很多相同的配置,本文告诉大家如何通过 Directory.Build.props 管理多个项目配置 在我的 MVVM 框架需要三个不同的库,一个是 ...

  6. CentOS服务器安装mysql

    1.配置YUM源 下载mysql源安装包 [root@localhost~]#wget http://dev.mysql.com/get/mysql57-community-release-el7-8 ...

  7. vue-learning:18 - js - watch

    watch watch可以监听data和computed中值的变化. watch在实例对象作用域中可以监听实例对象的数据,即var vm = new Vue(options)时作为配置对象属性传入.监 ...

  8. 【37.48%】【hdu 2587】How far away ?(3篇文章,3种做法,LCA之Tarjan算法)

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  9. 微软软件开发技术二十年回顾-API篇(转)

    二. API篇 随着Windows操作系统开始占据主导地位,开发Windows平台下的应用程序成为人们的需要.当然,这也为传统的DOS程序员提供了一种新的编程方法-一种不受设备限制并由事件驱动的编程方 ...

  10. 2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树)

    2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树) 传送门:https://nanti.jisuanke.com/t/41296 题意: 给一个数列A 问在数列A中有多 ...