linux下分析Java程序内存汇总

使用pmap查看进程内存

执行命令

使用pmap能够查看某一个进程(非java的也能够)的内存使用使用情况,

命令格式:

pmap 进程id

演示样例说明

比如执行:

pmap 12358

显示结果例如以下图(内容较多, 分成几张图说明):

内容開始部分

内容结束部分

上图中,

第一列。内存块起始地址

第二列。占用内存大小

第三列,内存权限

第四列。内存名称。anon表示动态分配的内存,stack表示栈内存

最后一行。占用内存总大小,请注意,此处为虚拟内存大小,占用的物理内存大小能够通过top查看

使用jmap查看Java进程对象使用情况

执行命令

使用jmap能够查看某个Java进程中每一个对象有多少个实例,占用多少内存。

命令格式:

jmap -histo 进程id

演示样例说明

比如执行:

jmap -histo  12538

显示结果例如以下图(内容较多, 分成几张图说明):

内容開始部分

内容结束部分

上图中:

第一列,序号。无实际意义

第二列,对象实例数量

第三列,对象实例占用总内存数。单位:字节

第四列,对象实例名称

最后一行,总实例数量与总内存占用数

另,部分演示样例说明(还没弄明确,兴许补充):

[C。

[B。

[I,

[J,

[L,

使用jstat查看Java内存分布及回收情况

直接看这个帖子:

http://blog.csdn.net/zlzlei/article/details/46471627

补充

发现一个不错的jmap,jstat等java分析工具的博客。例如以下:

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

时间: 2024-10-15 05:28:54

linux下分析Java程序内存汇总的相关文章

Linux下执行Java程序

在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java    会提示未找到指令,但用java -verison测试环境变量是没问题的 百度了好久,说的很复杂,重新再linux配置环境变量,输入 vi /etc/profile进入,添加以下代码: export JAVA_HOME=/usr/local/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH export CLASSPA

如何使用加多宝(jdb)在linux下调试Java程序

毕业时写了一段时间的C,那时候调试使用gdb,后来转了java,当时就想java程序怎么调试,找了一下,果然,那就是jdk自带的jdb windows里是这样的 Linux下是这样的 一般我在linux下来调试Java程序 好,那么,问题来了,这玩意怎么用?有好几种玩法 第一种玩法:以经典的HelloWorld为例,先写一个Java程序,如下: 我们把编译好的类上传到linux下,如下所示 务必强调一下:类所在的包名的层次结构也要在linux下体现出来 下面我们来玩起来,在linux下操作如下

【linux】linux下运行java程序

参考了http://www.cnblogs.com/howard-queen/archive/2012/01/30/2331795.html 第一步:用vim先写一个java程序  first.java  就写在jdk的bin目录下 public class first{ public static void main(String args[]){ System.out.println("This is my first program."); } } 第二步:./javac /us

Linux上分析java程序的问题

通过日志看不出来的问题,可以通过看java的堆栈信息(dump文件)来看出一些端倪. 1. 找java的进程id.jdk/bin的目录 ps -ef | grep java 2. cd 到bin的目录,执行jstack命令 ./jstack [pid]    需要在catalina_yyyy-MM-dd.log里面看dump信息 ./jstack -l -F [pid]  强制打印栈信息,可以在console中看dump信息 参数: -F   当’jstack [-l] pid’没有相应的时候强

linux下启动java程序的通用脚本2

一.start.sh #!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/server.name/!d;s/.*=//' conf/server.properties | tr -d '\r'` SERVER_PORT=`sed '/server.netty.port/!d;s/.*=//' conf/server.propert

Java 程序内存分析

转自:http://www.iteye.com/topic/528230 java程序内存主要分为了2个部分,包括stack segment(栈内存区).heap segment(堆内存区). 在分析Java程序内存分配情况时,我们从下面这个经常被使用的例子开始吧. 下面程序将打印什么呢? String s1 = new String("abc"); String s2 = new String("abc"); System.out.print(s1.equals(

在Linux下启动Java服务的脚本

#!/bin/sh #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. # #Author: tudaxia.com, Date: 2011/6/7 # #警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程. #在杀死进程前,未作任何条件检查.在某些情况下,如程序正在进行文件或数据库写操作, #可能会造成数据丢失或数据不完整.如果必须要考虑到这类情况,则需要改写此脚本,

Java程序内存分析:使用mat工具分析内存占用

在工作中可能会遇到内存溢出这种灾难性的问题,那么程序肯定是存在问题,找出问题至关重要,上一篇文章讲了jmap命令的使用方法,当然用jmap导出的文件我们也看不懂啊,那就交给memory analyzer(mat)这个工具,让他帮助我们来观察程序的内存分布情况吧. 1. 用jmap生成堆信息 2. 将堆信息导入到mat中分析 3. 生成分析报告 Histogram Dominator Tree Top consumers Leak Suspects MAT 不是一个万能工具,它并不能处理所有类型的

Linux下部署Java应用程序

Linux软件安装的特点: 1.Linux中没有注册表的概念,因此要想删除某个软件直接删除软件目录就可以了. 2.软件的安装有些需要Linux软件包的支持,在Linux中使用rpm命令管理软件包. 3.Linux中软件安装的过程很迅速,并且软件的运行速度也很快. 4.Linux中权限管理很严格,因此安装时需要对安装介质进行权限配置. 体验Linux下的Java开发 编译器->字节码->(虚拟机)本地机器码->执行 Linux系统与Windows系统最大的区别: Windows路径分隔是&