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
一些线上排查的注意事项:
1.greys不能用于增强系统类,即便他给了个开关,但不要用;
2.btrace增强后无法撤销,要撤销需要重启服务;
3.NMT不要开启detail,影响性能;
4.配置jemalloc和tamalloc的采样的时候注意采样率,千万别配0(全部采样);
5.jmap的-heap,jstack和jmap -F参数会导致JVM暂停.(SA.attch)
常用配置&命令
常用命令&工具
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
heap dump分析
可以使用MAT,Heap Analyzer和VisualVM这些工具.
一些提取操作(比如要获得一个大字符串/char[]的值)可以通过OQL表达式.
例子:
获取到了address 拿取数据(是个char[])
chars = heap.findObject("0x666666666")
var writer = new java.io.FileWriter("D:/temp/oql/666.txt");
for (var i = 0; i < chars.length; i++) {
writer.write(chars[i]);
}
writer.close()
visualVM中拿到index(这个index是sharp后面的 不是address)
filter(heap.objects('char[]'),
function(it, index) {
if (index == 66) {
var writer = new java.io.FileWriter("D:/temp/oql/666.txt");
for (var i = 0; i < it.length; i++) {
writer.write(it[i]);
}
writer.close();
return true;
}
return false;
})
更多内存信息
在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
直接内存在internal中 但不包含Mapped ByteBuffer
https://stackoverflow.com/questions/47309859/what-is-contained-in-code-internal-sections-of-jcmd
博客 & 文章
一些文章和不错的博客.
随着时间的迁移和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
入门科普,围绕JVM的各种外挂技术
http://calvin1978.blogcn.com/articles/vjtools-tools4.html
JVM内存知识备忘的更多相关文章
- Java-100天知识进阶-JVM内存-知识铺(三)
知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停的来唤醒你记忆深处的知识点. Java内存模型(JMM) JVM内存模式是JVM的内存分区 Java内存模式是一种虚 ...
- GIS部分理论知识备忘随笔
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...
- JVM 内存知识总结
本文主要参考内容: http://hllvm.group.iteye.com/group/wiki/3053-JVM http://my.oschina.net/xishuixixia/blog/13 ...
- java基础知识备忘
1.java内存分配 a.寄存器cup -- 暂不涉及 b.本地方法栈 -- 虚拟机调用windows功能用的,比如创建文件夹 c.方法区 -- 存放 .class文件,负责存放方法 d.栈 -- ...
- java String分配内存空间备忘
栈内存 堆内存 基础类型,对象引用(堆内存地址) 由new创建的对象和数组, 存取速度快 相对于栈内存较慢 数据大小声明周期必须确定 分配的内存由java虚拟机自动垃圾回收器管理.动态分配内存大小 共 ...
- JavaScript中JSONObject和JSONArray相关知识备忘(网络转载)
1.json的格式,有两种: {"key": "value"} //JSONObject(对象) [{"key1": "value ...
- XSS Payload知识备忘
参考资料:<白帽子讲Web安全>吴翰清 著 参见: 百度百科 http://baike.baidu.com/view/50325.htm 维基百科 http://zh.wikipedia. ...
- Flex知识备忘
div被flex遮挡 //如果设置z-index无效,那么设置flex加载参数 params.wmode = "Opaque";
- DataSet、DataTable和DataGridView知识备忘
datatable中,获取第i行j列的单元格内容: string str = DataSet.Tables[0].Rows[i][j].ToString():datagridv ...
随机推荐
- RESTful-5开发API
RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计. 它的大原则容易把握,但是细节不容易做对.本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API. ...
- 2018-2019-2 20165239《网络对抗技术》Exp4 恶意代码分析
Exp4 恶意代码分析 实验内容 一.基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. •使用w ...
- MockPlus原型设计介绍
MockPlus原型设计介绍 在第八周的课堂上,王文娟老师在校园系统上发布了对于自行选择的原型设计软件进行资料查找以及自学的任务.因为之前的课程学习需要,我们已经大概掌握了原型设计软件Axure的使用 ...
- Csharp 连接NHibernate下需要注意的几个点
背景: 在学习Photon Server 时,我看的教程中使用了NHibernate 框架来连接管理Mysql数据库. 我在以前只使用过java中的Spring boot,感觉两者有些相似之处. 我写 ...
- hadoop2-MapReduce详解
本文是对Hadoop2.2.0版本的MapReduce进行详细讲解.请大家要注意版本,因为Hadoop的不同版本,源码可能是不同的. 以下是本文的大纲: 1.获取源码2.WordCount案例分析3. ...
- IE控件cab包手动安装
一.XP系统 第1步:先解压cab包,在解压的文件中找到*.inf文件,然后右击,选择安装,此时会把解压文件拷到C:Windows\System32文件夹下.第2步:注册拷到上述文件夹下的ocx文件. ...
- Android四大组件的简介
Android开发四大组件分别是: 一.活动(Activity): 用于表现功能.二.服务(Service): 后台运行服务,不提供界面呈现. 三.广播接收器(BroadcastReceiver):用 ...
- php基础-mysqli
基本八个步骤 //连接数据库 $link = mysqli_connect('localhost', 'root', ''); //判断是否连接成功 if (!$link) { exit('数据库连接 ...
- mysql爱之深探测
第一:函数 一:内置函数 MYSQL中提供了很多内置的函数,以下: CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符.一个多字节字符算作一个单字符. 对于一个包含五个二 ...
- [LeetCode] Image Overlap 图像重叠
Two images A and B are given, represented as binary, square matrices of the same size. (A binary ma ...