分析服务器上的堆内存

服务器上生成dump文件

 

jmap

jmap命令可以打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

参数:

  • -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
  • -finalizerinfo 打印正等候回收的对象的信息.
  • -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
  • -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
  • -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
  • -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
  • -h | -help 打印辅助信息
  • -J 传递参数给jmap启动的jvm.
  • pid 需要被打印配相信息的java进程id,创业与打工的区别 - 博文预览,可以用jps查问.

例子:

ps -ef | grep tomcat  先找到进程号。

jmap -dump:live,format=b,file=a123.hprof 23603  完成指定 pid 的dump

 

设置JVM启动参数,OOM时Dump

另外一个设置dump的思路是设置JVM参数,OOM时自动dump.

设置JVM 启动参数 -Xmx1024m -Xms1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\dump (其中堆 1,073,741,824个字节,字节与m相差大约6个倍数)

 

使用 VisualVM 分析 dump的内容

 

 

参考:

http://blog.csdn.net/fenglibing/article/details/6411953 

http://mousycoder.com/2016/01/15/simple-tutorial-of-visualvm-2/

http://www.cnblogs.com/kongzhongqijing/articles/3621163.html

时间: 2024-11-06 11:46:22

分析服务器上的堆内存的相关文章

zabbix监控windows服务器上进程的内存使用情况

zabbix监控windows服务器上进程的内存使用情况 由于在windows服务器上不能像linux上一样使用top,或者类似于/pro目录下的数据信息,所以在在windows服务器上获得一个进程的内存或者CPU的使用情况不是很容易. 这里通过在windows服务器上使用python脚本获得进程的内存使用值,通过key传递给zabbix客户端,也就是本机上安装的zabbix客户端. windows上安装zabbix客户端网上的文章很多,这里不再记录. 1,首先安装python环境: 点击这里下

org.springframework.web.servlet.view.InternalResourceViewResolver 堆内存高问题

Spring使用 org.springframework.web.servlet.view.InternalResourceViewResolver 堆内存高问题 通过 Eclipse Memory Analyzer (http://www.eclipse.org/mat/)分析工具如下,堆内存中50.51% 是由InternalResourceViewResolver 产生的. 我当前使用的Spring版本是:Spring 3.1.1.RELEASE One instance of "org.

转自Android内存机制分析1——了解Android堆和栈

转自http://www.cnblogs.com/mythou/p/3202238.html 昨天用Gallery做了一个图片浏览选择开机画面的功能,当我加载的图片多了就出现OOM问题.以前也出现过这个问题,那时候并没有深究.这次打算好好分析一下Android的内存机制. 因为我以前是做VC++开发,因此对C++在Window下的内存机制还是比较了解.不过转到Android后,一直都没有刻意去处理内存问题,因为脑子里一直想着Java的GC机制.不过现在想想,自己对Android的GC和内存管理并

JAVA 从GC日志分析堆内存 第七节

JAVA 从GC日志分析堆内存 第七节 在上一章中,我们只设置了整个堆的内存大小.但是我们知道,堆又分为了新生代,年老代.他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西.因此这章我们通过分析GC日志来一步步讲解如何细化设置堆内存. 首先我们来了解几个相关的参数: -XX:+PrintGCDetails:用于告诉虚拟机回收垃圾的时候顺便打印日志. -Xloggc:路径 :将打

Linux堆内存管理深入分析(上)

Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 ? 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢出的漏洞利用资料就很少了.鄙人以为主要是堆溢出漏洞的门槛较高,需要先吃透相应操作系统的堆内存管理机制,而这部分内容一直是一个难点.因此本系列文章主要从Linux系统堆内存管理机制出发,逐步介绍诸如基本堆溢出漏洞.基于unlink的

解决服务器上 w3wp.exe 和 sqlservr.exe 的内存占用率居高不下的方案

SQL Server是如何使用内存 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看statistics io的时候,看到的physics read都是0.其次就是查询的开销,一般地说,hash join是会带来比较大的内存开销的,而merge join和nested loop的开销比较小,还有排序和中间表.游标也是会有比较大的开销.最后我们来看查询的开销,这个开销显然是越低越好,因为我

java内存分配分析/栈内存、堆内存

前言 本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java.这类文章网上有很多,但大多比较零碎.本文从认知过程角度出发,将带给读者一个系统的介绍. 进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性.所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提

Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化

Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化  大 | 中 | 小  [ 2008-10-28 16:55 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2008.10.28 转载请注明原文链接:http://blog.zyan.cc/post/375/] VPS(全称Virtual Private Server)是利用最新虚拟化技术在一台物理服务器上创建多个相互隔离的虚拟私有主机.它们以最

C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针

(1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放,造成内存泄露,下面的例子就可能造成20个字节的泄露,内存泄露不是一个立即会引发故障的错误,但是 它将消耗系统内存. void function1() { char *pa; pa = (char*)malloc(sizeof(char)*20); if(NULL !=pa) { strcpy(pa,"hello"); printf("pa = %x\n",