深圳Java培训
达内深圳宝安中心

136-3244-2201

热门课程

【达内JAVA学堂】教你几招判断JAVA是否内存泄漏

  • 时间:2015-12-08
  • 发布:深圳Java培训
  • 来源:达内新闻

首先,用下面的命令监视进程:

while ( sleep 1 ) ; do ps -p $PID -o %cpu,%mem,rss ; done

(如果有的话还有New Relic)

如果看到内存上升很快,可能是因为虚拟机设置。如果没有明确指定JVM的内存设置,它将设置默认值给他们。要获得默认值,使用以下命令:

java -XX:+PrintFlagsFinal -version | grep -i HeapSize

【达内JAVA学堂】教你几招判断JAVA是否内存泄漏

如果这些都不符合你所希望的,那么就需要指定JVM的内存设置。可以用下面的命令设置最小和最大堆大小:

java -Xms128m -Xmx256m

尽管有了合理的内存设置,也可以监控进程,但仍然可能看到内存随时间增加。为了进一步探究原因,可以使用下面的命令查看对象实例的直方图:

jmap -histo $PID

如果仍然没有足够的信息,那么可以用以下命令进行堆转储:

jmap -dump:format=b,file=/tmp/dump1.hprof $PID

通常,会用两个堆转储,然后使用下面的jhat命令比较它们:

jhat -baseline /tmp/dump1.hprof /tmp/dump2.hprof

这个命令会启动一个HTTP服务器,使用者可以用它来探索这两个堆转储之间的差值。在默认情况下,HTTP服务器启动7000端口,使用者可以在浏览器中访问该端口。

如果你有防火墙,可以通过SSH访问,那么你可以通过如下命令连接该端口:

ssh -L 7000:localhost:7000 $HOST

向下滚动到第一页的底部,会看到两个有用的链接:

Show heap histogram

Show instance counts for all classes (excluding platform)

这将给使用者展示在不同堆转储之间所有“新”的实例,应该对你检测泄漏来自哪里有些帮助。

【更多JAVA资讯JAVA培训新闻请关注深圳JAVA培训sz.java.tedu.cn

========深圳达内学院联系方式========

深圳达内联系QQ1548888884

咨询电话:400-0755-581

学校网址:http://sz.java.tedu.cn

扫描二维码加入我们的微信平台,微信号1tarenaz

微信号2sz_tarena

联系地址:深圳市宝安中心区宝源路1053号资信达大厦401

上一篇:猜猜看,Java语言的普及率有多少?
下一篇:2015年12月编程语言排行

预计发布的Java 9中,很令人期待的是什么?

【深圳JAVA培训】世界十类很急需IT人才

JAVA——很吃香的编程语言

为什么程序员是很有钱的一批人?

选择城市和中心
贵州省

广西省

海南省