JVM堆外内存分析
JVM堆外内存分析
@Date 2017.07.20
事件回顾
在对应用进行压测的时候,观察物理内存占用以及JVM堆中对象情况,发现物理内存占用很大,堆中对象却很少.怀疑是堆外内存占用问题.
工具介绍(gperftools)
- 下载工具libunwind-1.0.tar.gz和gperftools-2.5.tar.gz并进行编译安装(具体可以查找教程)
- 在安装之后并配置好gperf路径
- 在JVM启动应用之前,执行以下命令
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so export HEAPPROFILE=/home/admin/logs/pro
- 会在HEAPPROFILE指定的目录中生成.heap文件
- 使用以下命令可以查看堆外内存文件的构成(支持导出gif或者pdf)
pprof --text /opt/taobao/install/ajdk-8.2.3-b46/bin/java pro_149025.0001.heap pprof --pdf /opt/taobao/install/ajdk-8.2.3-b46/bin/java pro_149025.0001.heap > xxx.pdf
- pprof默认显示方法占用,但是有的时候只显示内催地址,不显示具体方法,不容易排查,则可以用下面的工具dump出来内存地址和方法的一个关系.生成的是16进制的起始地址和16进程的地址长度.可以写个脚本计算之后与pprof结果对比
https://github.com/jvm-profiling-tools/perf-map-agent
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
记一次Java进程突然消失问题
记一次Java进程突然消失问题 @Date 2017.05.22 现象: 线上同一个应用部署了多台服务器,有的机器运行过程中突然告警,发现服务进程消失. 看程序本身的日志,没有异常输出 查询磁盘空间是否不足,没有此问题 增加如下启动参数,查看GC日志,发现程序无GC出现 -Xloggc:/home/admin/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof 在上述重启服务时,发现一个现象,程序重启没有多久就消失掉. 此时使用dmesg 查看Linux系统日志, dmesg只能查看到最近的系统缓存日志,所以在现场能还原时查看最合适. 重点: 会发现dmesg的日志中出现oom kill的字样,由此可以判断应该是机器内存被占满,系统自动选择一个占用内存最大的进行kill掉 复现确认 在启动应用之后,使用free命令查看机器内存占用情况, 发现total和used相差无几 查看J...
- 下一篇
IDEA 实用插件总结
IDEA Plugin 备份 @Date 2017.05.24 key promoter 在操作IDEA功能时会提示对应的快捷键 maven helper 分析maven依赖 lombok 支持编译logbok注解 FindBugs 扫描工程发现代码明显错误告警问题 Alibaba Java Coding Guidelines 阿里巴巴代码规范 Grep Console IDEA 控制台日志输出,颜色区分 GsonFormat Json格式化 Rainbow Brackets 代码区块, 不同颜色区分
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境