分析java项目的堆栈内存情况

1.本地运行java项目,使用idea 开发
在输入jvisualvm
在这里插入图片描述
2.会加载一个新窗口,在这里面分析内存情况
在这里插入图片描述
3.远程运行的java程序
启动程序时时添加先参数

// 在linux 运行脚本上添加  
-Djava.rmi.server.hostname=192.168.44.33 -Dcom.sun.management.jmxremote.port=8881 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -


192.168.44.33是服务器运行的地址 8881是端口

此时在jvisualvm 里面添加远程输入连接查看堆栈情况

另外启动参数说明:

// jvm的运行内存大小
java -Xms600m -Xmx1048m 
// 内存溢出会自动自动打印日志
-XX:+HeapDumpOnOutOfMemoryError -XX:NativeMemoryTracking=detail -XX:HeapDumpPath=/home/firefly/Outmemory.log 
//jvisualvm   连接
-Djava.rmi.server.hostname=192.168.44.33 -Dcom.sun.management.jmxremote.port=8880 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -
//远程debug 调试
Xdebug  -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 
//启动使用GMT时区时间
-Duser.timezone=GMT

3.在linux 运行的java 程序
使用命令行生产dump 文件

sudo jmap -histo:live pid >>/home/user/jmap.dump

使用MemoryAnalyzer 分析这个文件,查看内存问题
在这里插入图片描述
4.在linux 系统中可以使用一些命令查看内存问题

// 分析各个进程所占内存运行状况
top

// 查看进程为pid 的各个线程运行情况
top -p pid -H

// 查看进程为pid 各个线程的详情
sudo jstack -l  pid  

// 查看进程为pid 各个存活的对象
sudo jmap -histo:live pid

//使用jmap查看堆栈信息
jmap -heap pid

//  3秒查看一次GC 执行 可以查看一下 老年代和年轻代的各种内存占用大小
jstat -gc 992  3000

猜你喜欢

转载自blog.csdn.net/rainAndyou/article/details/109687192