jvm内存占用过高分析

Java内存模型是描述Java程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。

在Java虚拟机中,内存分为三个代:新生代(New)、老生代(Old)、永久代(Perm);

  • 新生代New:新建的对象都存放这里
  • 老生代Old:存放从新生代New中迁移过来的生命周期较久的对象。新生代New和老生代Old共同组成了堆内存。
  • 永久代Perm:是非堆内存的组成部分。主要存放加载的Class类级对象如class本身,method,field等等。

【jvm内存占用过高分析】

1.top                >> 观察占用cpu或者MEN(内存)使用情况最高的进程,记录PID;

2.top -p PID     >> 观察该PID对应进程的占用情况,
   shift + h        >> 开启线程显示,观察cpu/Men占用较高的线程有哪些,记录对应TID;

3.jstack PID > jstack.txt   >> 查看该线程的堆栈信息

4.printf "%x\n" TID   >> 将线程对应PID转为 16进制数(TID16);

5.cat jstack.txt | grep TID16    >> 查看当前占用内存高的线程具体在做什么操作,分析原因

6.jmap -histo:live PID   >> 查看当前堆内存中存在哪些存活对象

7. jstat -gcutil PID 1000 3  >> 查看gc情况

相关文章

jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下...
原文链接:https://www.cnblogs.com/niejunlei/p/5987611.ht...
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是...
jvm
1.jvm的简单抽象模型:  2.类加载机制     双亲委派模...
堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代...
1.springboot和tomcat2.springcloud的请求如何通过网关鉴权?...