JVM内存知识备忘

又是一篇备忘...
主要记录一些知识,进行一些资源的汇总.

先来群里liufor大大提供的两张图,清晰易懂:

Dockerized Java
https://www.youtube.com/watch?v=NQ5hTEp-GTM


Java on Linux for devs and ops
https://www.slideshare.net/aragozin/java-on-linux-for-devs-and-ops

常用配置&命令

常用命令

JVM启动用的命令行

jcmd process_id VM.command_line

手工触发gc

jcmd process_id GC.run

显示调优标志

jcmd process_id VM.flags [-all]

all比较有用 可以看到全部的 包括默认值 在排查一些问题的时候能看的信息比较多

内存dump 使用情况查看:

jmap -dump:format=b,file=test.bin process_id
jmap -heap process_id  

更多内存信息

在linux上使用,使用/proc/pid/map内的信息,以及pmap.
使用gdp dump出内存查看信息
详见: http://lysu.github.io/blog/2015/02/02/how-to-deal-with-non-heap-or-native-memory-leak/

GC log相关

//日志数量 每个log大小 存放位置
-XX:NumberOfGCLogFiles=7
-XX:GCLogFileSize=64M
-Xloggc:/opt/jetty/logs/gc.log
//绝对时间戳 相对的用-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
//详细的信息 平均时间等 精简的用-XX:+PrintGC
-XX:+PrintGCDetails

NMT

-XX:NativeMemoryTracking=[off | summary | detail]
jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]  

可以比较有效看到几个部分的内存使用情况 以及设置baseline后 在看具体的变化量
使用时要先设置JVM参数 生产环节慎用detail
参考文档:
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html

博客 & 文章

一些文章和不错的博客.
随着时间的迁移和JVM的升级,这里(包括这文)的内容可能会过时,自己甄别一下~

你假笨博客
http://lovestblog.cn/

Alexey Ragozin的博客(也是第二图ppt的作者)
http://blog.ragozin.info/

JVM内存调优相关的一些笔记(杂)
https://zhanjindong.com/2016/03/02/jvm-memory-tunning-notes

REDUCE LONG GC PAUSES
https://blog.gceasy.io/2016/11/22/reduce-long-gc-pauses/

Oh the Places Your Java Memory Goes
https://jkutner.github.io/2017/04/28/oh-the-places-your-java-memory-goes.html

原文地址:https://www.cnblogs.com/fairjm/p/jvm_memory_note.html

时间: 2024-10-10 11:29:59

JVM内存知识备忘的相关文章

Java-100天知识进阶-JVM内存-知识铺(三)

知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停的来唤醒你记忆深处的知识点. Java内存模型(JMM) JVM内存模式是JVM的内存分区 Java内存模式是一种虚拟机规范 1.?Jvm内存按照运行时态及内存规范划分 Java内存区域 2.1** 线程安全 ** 2.1.1 程序计数器 2.1.2 虚拟机栈 2.1.3 本地方法 2.2 线程不安全 2.2.1 方法区 2.2.2 堆包含如下图 2.2.3 堆内存划分 总结: 程序计算器是唯一不会 OOM区 堆

GIS部分理论知识备忘随笔

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带的算法为: 6度带:N=L/6,有余数则+1,所以带号是19,中央子午线经度 L'=6N-3 即19*6-3=111°. 3度带:N=(L-1.5)/3,有余数则+1,带号37,经度111°. 2.七参数转换 对于7参数转换,设置为:DX#DY#DZ#QX#QY#QZ#M DX:X偏移,单位米: D

知识备忘

1.List  GroupBy 用法 var _roomProducts = homesingProducts.GroupBy(t => t.RoomName); RoomedProducts temp = new RoomedProducts(); foreach (var item in _roomProducts) { roomNames.Add(item.Key); temp = new RoomedProducts(); temp.RoomName = item.Key; temp.P

JVM 内存知识总结

本文主要参考内容: http://hllvm.group.iteye.com/group/wiki/3053-JVM http://my.oschina.net/xishuixixia/blog/133850 http://my.oschina.net/xishuixixia/blog/132395 http://www.cnblogs.com/gw811/archive/2012/10/18/2730117.html#undefined 1. JVM 内存模型: 程序计数器寄存器(The pc

java基础知识备忘

1.java内存分配 a.寄存器cup -- 暂不涉及 b.本地方法栈  -- 虚拟机调用windows功能用的,比如创建文件夹 c.方法区  -- 存放 .class文件,负责存放方法 d.栈 -- 负责运行方法(运行时从方法区拷贝一份到栈) e.堆     -- 创建并存放对象(new出来的对象) 2.栈和堆的区别 a.存储内容   栈-方法 堆-对象 b.默认值 栈-无默认值 堆-有默认值 (所以成员变量不需初始化赋值,局部变量必须赋值 ) c.生命周期 栈-方法执行完毕弹出 堆-对象使用

java String分配内存空间备忘

栈内存 堆内存 基础类型,对象引用(堆内存地址) 由new创建的对象和数组, 存取速度快 相对于栈内存较慢 数据大小声明周期必须确定 分配的内存由java虚拟机自动垃圾回收器管理.动态分配内存大小 共享特性 栈中如果有字符串,则直接引用 如果没有,开辟新的空间存入值 每new一次在堆内存中生成一个新的对象. 创建之后值可以改变 String类声明后则不可改变 一.栈内存 基础类型int, short, long, byte, float, double, boolean, char和对象引用 栈

字符串转数字测试--知识备忘

闲来无事,看了不少js的奇淫技巧,其实很多只是卖弄知识真正用上的并不多,为了满足好奇心做了一个实验. 这个实验是关于将字符串转成数字的,因为前端处理小数会出很多问题,所以一般都是后台的同学把数据处理好了给前端,但是后端传过来的是字符串,而这些字符串有些是带小数点的,有些是整数,传过来有时候要做一些操作,字符串做不了所以要做类型转换,即String --> Number. 对于类型转换有常用的几种方法,现在一起看看这几种方法的速度如何? 字符串转数字的方法有,Number,parseInt,par

DataSet、DataTable和DataGridView知识备忘

datatable中,获取第i行j列的单元格内容:             string str = DataSet.Tables[0].Rows[i][j].ToString():datagridview中,获取第i行j列的单元格内容:             string str =  DataGridview.Rows[i].Cells[j].Value.ToString(): DataGridview的  SelectionMode 属性 设置为 FullRowSelect 之后,获取指

Flex知识备忘

div被flex遮挡 //如果设置z-index无效,那么设置flex加载参数 params.wmode = "Opaque";