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