资讯专栏INFORMATION COLUMN

OM引起你的注意了吗?

loonggg / 2422人阅读

摘要:引曾几何时这句话总是在你的程序中出现,新手到是什么问题后就去改了内存大小还总是分不清楚,想的是总之设大点我就看不到这个错误了。稍微有点经验的会翻翻看看什么地方会出现内存泄露,当然也会改参数,但会有节制的改了。

曾几何时java.lang.OutOfMemoryError: Java heap space这句话总是在你的程序中出现,新手search到是什么问题后就去改了内存大小还总是分不清楚Xms Xmx PermSize MaxNewSize,想的是“总之设大点我就看不到这个错误了”。稍微有点经验的会翻翻code看看什么地方会出现内存泄露,当然也会改参数,但会有节制的改了。老鸟会使用工具来分析到底是哪里造成了泄露?是code的问题还是内存真的配置不够?

项目做完后功能测试通过了,拿到客户那里跑了没几天发现不处理东西了,java傻掉了让它干什么都不动,真不听话!于是细细的看log发现了java.lang.OutOfMemoryError: Java heap space。性能测试呢?忽略了吗?

有人也许觉得OM不是多大的事,如果这么想就错了!

一个项目从设计、开发、测试、发布,这中间经历了多少风雨相信有经历的朋友肯定不会忘记多少个不眠之夜伴随着你走完了一个项目周期,自以为把一个精美的产品卖给了客户,可谁知道这里面竟然有一个潜伏很深的炸弹!说不定什么时候就会出现炸你一下,让你手忙脚乱的去找问题点。赶上不能远程连接的,还要去客户那里解决,管理严格的甚至你带进去的笔记本都要贴封条所有接口全封,不能联网,试想身临其境下,在一个机房孤单的去找OM源头是什么感受?

Function

监控工具:
推荐使用visualvm来监控jvm的内存使用情况。

既然是要分析jvm,那么肯定得连接了,visualvm连接jvm有2种方式

在jvm启动的参数中加入-Dcom.sun.management.jmxremote.port=端口号,jmx连接方式

jdk/bin/执行cp ../jre/lib/security/java.policy ./ 修改java.policy

grant codeBase "file:{java.home}/../lib/tools.jar"

再启动jstatd

./jstatd -J-Djava.security.policy=java.policy -J-Djava.rmi.server.hostname=IP

这种是jstatd连接方式

分析dump工具:IBM HeapAnalyzer,分析jvm dump出的文件来看具体是哪里可能存在泄露问题

jdk自带分析工具:jmap,jstat,jconsole,jps

线程分析:

不知道有没有碰到这种问题的,看top cpu占用发现奇高不下,可现在应该什么都没干啊,这是怎么回事?什么东西在疯狂的做事还不让我知道?往往这时候好多人只能止步了,因为不知道怎么去追查到底是谁在占用cpu。

先使用top确定你要分析的java进程pid,如:5683

使用jstack导出java的线程列表,如:jstack -l 5683 > 5683.stack

再使用top -H -p PID命令查看java进程里的子线程的实际占用,记录id后和导出的stack文件比对,就能知道具体的是哪里占用

以上提到的每一种工具,大家都能搜到很详细的使用说明,这里就不写了省得有骗字数之嫌。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65295.html

相关文章

  • 【译】JavaScript 框架的探索与变迁(下)

    摘要:对此没有任何限制,它不关心这个。一种控制变化的办法是不可改变的,持久化的数据结构。总结检测变化时开发中的核心问题,而框架们以各种方式解决这个问题。因为组件内的变化是不被允许的。 AngularJS:脏检查 我不知道什么更新了,所以当更新的时候,我只能检查所有的东西。 AngularJS 类似于 Ember,当状态改变的时候,必须人工去处理。但不同的是,AngularJS 从不同的角度来...

    CollinPeng 评论0 收藏0
  • 今天,你的浏览器 “滚动” 了吗

    摘要:今天,你的浏览器滚动了吗序在页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。 今天,你的浏览器 滚动 了吗? 序 在 Web 页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。而应对溢出,隐藏或者滚动是最常见的处理方式。滚动,作为 FEers 最经常...

    leo108 评论0 收藏0
  • 今天,你的浏览器 “滚动” 了吗

    摘要:今天,你的浏览器滚动了吗序在页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。 今天,你的浏览器 滚动 了吗? 序 在 Web 页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。而应对溢出,隐藏或者滚动是最常见的处理方式。滚动,作为 FEers 最经常...

    ad6623 评论0 收藏0
  • 简单基于spring的redis配置(单机和集群模式)

    摘要:优点是反序列化时不需要提供类型信息,但缺点是序列化后的结果非常庞大,是格式的倍左右,这样就会消耗服务器的大量内存。使用库将对象序列化为字符串。优点是速度快,序列化后的字符串短小精悍。 需要的jar包:spring版本:4.3.6.RELEASE,jedis版本:2.9.0,spring-data-redis:1.8.0.RELEASE;如果使用jackson序列化的话还额外需要:jac...

    Tychio 评论0 收藏0
  • 切图崽的自我修养-规范CSS元素命名

    摘要:目前为止,这个命名已经可以打分,离满分存在的差距在哪里如果一律采取驼峰命名,在从属关系的可读性上,稍微差了一点,来比较一下这两个命名的可读性和明显采取驼峰匈牙利命名的方式可读性更强。 前言 为什么我刚才写的样式乱了?! 如何给变量,文件命名是程序员的老大难问题。命名为什么会这么难,因为它太重要了。可以这么说,准确的命名可以提高代码的可读性,让人容易理解,方便调试,也给以后修改和维护你的...

    mozillazg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<