又是一篇备忘...

主要记录一些知识,进行一些资源的汇总.

先来群里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 AnalyzerVisualVM这些工具.

一些提取操作(比如要获得一个大字符串/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内存知识备忘的更多相关文章

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

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停的来唤醒你记忆深处的知识点. Java内存模型(JMM) JVM内存模式是JVM的内存分区 Java内存模式是一种虚 ...

  2. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  3. JVM 内存知识总结

    本文主要参考内容: http://hllvm.group.iteye.com/group/wiki/3053-JVM http://my.oschina.net/xishuixixia/blog/13 ...

  4. java基础知识备忘

    1.java内存分配 a.寄存器cup -- 暂不涉及 b.本地方法栈  -- 虚拟机调用windows功能用的,比如创建文件夹 c.方法区  -- 存放 .class文件,负责存放方法 d.栈 -- ...

  5. java String分配内存空间备忘

    栈内存 堆内存 基础类型,对象引用(堆内存地址) 由new创建的对象和数组, 存取速度快 相对于栈内存较慢 数据大小声明周期必须确定 分配的内存由java虚拟机自动垃圾回收器管理.动态分配内存大小 共 ...

  6. JavaScript中JSONObject和JSONArray相关知识备忘(网络转载)

    1.json的格式,有两种: {"key": "value"} //JSONObject(对象) [{"key1": "value ...

  7. XSS Payload知识备忘

    参考资料:<白帽子讲Web安全>吴翰清 著 参见: 百度百科 http://baike.baidu.com/view/50325.htm 维基百科 http://zh.wikipedia. ...

  8. Flex知识备忘

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

  9. DataSet、DataTable和DataGridView知识备忘

    datatable中,获取第i行j列的单元格内容:             string str = DataSet.Tables[0].Rows[i][j].ToString():datagridv ...

随机推荐

  1. Debian+Django+uWsgi+nginx+mysql+celery

    下载系统各种依赖 nano /etc/apt/sources.list 在Debian中使用apt-get安装软件包时经常会提示让你插入netinst的光盘: Media change: please ...

  2. Outlook IMAP 修改PST文件存储路径

    IMAP类型的账户修改PST文件位置方法: 对于IMAP类型账户的PST文件,既没有“修改文件夹”的选项,也无法按OFFICE官方操作指南中的操作.因为每次Outlook只要检测到默认路径下的PST文 ...

  3. winxp改AHCI不再蓝屏,不用改注册表,所有PC机通用

    要用win8的pe 在通常的情况下,硬盘在BIOS中默认为原生IDE模式以获得最好的兼容性.对配件要求较高的W7,W8系统中,而通过开启硬盘AHCI模式,可以在一定程度上提升硬盘的性能表现.如果在ID ...

  4. 这篇通俗实用的Vlookup函数教程,5分钟就可以包你一学就会

    如何利用Vlookup函数获取学号中的班级信息.换言之,咱们源数据中放着姓名性别学号班级等信息,而在另一张表格中一定有学号信息,但其他信息就未必有,这需要我们将缺失的信息自动同步过去.使用vlooku ...

  5. hashMap 方法详解

    http://www.iteye.com/topic/754887 /** * 扩展散列表的容量 * @param newCapacity */ void resize(int newCapacity ...

  6. 福州大学软件工程1916|W班 第3次作业成绩排名

    作业链接 结对第二次-文献摘要热词统计及进阶需求 评分细则 本次作业由三部分组成(程序满分80,博客满分70,工程能力满分30) 程序评分标准 基础需求 共有7个测试用例,每个满分20分并按照一定的映 ...

  7. AngularJS 最常用的八种功能

    转载地址:https://zhaoyanblog.com/archives/99.html 第一 迭代输出之ng-repeat标签ng-repeat让table ul ol等标签和js里的数组完美结合 ...

  8. 平时作业六 java

    编写一个Java应用程序,使用Java的输入输出流技术将Input.txt的内容(Input.txt为文本文件)逐行读出,每读出一行就顺序为其添加行号(从1开始,逐行递增),并写入到另一个文本文件Ou ...

  9. REM——适合移动开发的自适应方案

    文章目录 1.什么是REM 2.REM和EM的区别 3.手机端方案的特点 4.使用JS动态调整REM 5.REM与其他单位同时存在 1.什么是REM 先来认识几个常见单位: px:像素,这个大家都知道 ...

  10. BZOJ2567 : 篱笆

    设第$i$个区间的左端点为$a[i]$,区间长度为$len$,要覆盖的部分的长度为$all$,因为区间左端点递增,所以最优方案中它们的位置仍然递增. 对于链的情况,要满足三个条件: 1. 区间$i$可 ...