JVM(和Spark)性能优化:使用Java Mission Control (5)

举报
大数据小粉 发表于 2016/11/16 17:01:27 2016/11/16
【摘要】 JVM(和Spark)性能优化:使用Java Mission Control

3.2.2 内存分配压力

分配选项卡包含有关线程本地分配缓冲区 (TLAB) 内外的已分配对象的数据。按类新 TLAB 中的分配/ TLAB 外部的分配->分配和按线程分配子选项卡包含有关按类或按线程列出的 TLAB 分配压力和堆栈跟踪的信息。

例如下图中,解析模块数据转换比较耗费内存,压力很大,可以深入分析代码:

请注意,“对象统计信息”选项卡默认是没有数据,提示说此记录中未启用事件类型'Object Count'。堆内容面板中包括哪些类有多少实例,占用了多少空间和比率。增长最快的对象面板中包括类名,堆中类实例数和大小的增长的数量,对于分析内存压力很有帮助。

启用事件类型'Object Count',可以在JMC的窗口->飞行记录模版管理器,导入文件C:\Program Files\Java\jre7\lib\jfr下的profile,再点编辑->高级,在UI中的筛选器中输入count,把Object Count(和Object Count after GC,可选)启用,

然后保存导出为profile_heap.jfr到C:\Program Files\Java\jre7\lib\jfr目录下(注意,是jre的目录)。并且修改集群配置:
1、 把集群中每个jre7/lib/jfr目录(可能在/opt/huawei/Bigdata/jdk1.7.0_72/jre/lib/jfr)下添加profile_heap.jfr文件,并且修改其权限与default、profile文件一样
2、 把每个spark-env.sh (可能在/opt/tsp/server/hadoopclient/Spark/spark/conf/ )的【命令选项5】中,settings=profile_heap
再运行应用程序后,“对象统计信息”选项卡中就有数据了。例如:

读者也可以观察到,在大数据处理中byte[]和char[](String对象内部就有它)常常是分配压力极大的对象,而数组一般需要连续的内存地址来存放。

作者 | 孙奇辉

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。