用什么工具查看内存溢出,结合具体实例讲一下具体的过程

果通过指令的话,一般先调用jps查看到具体的pid,然后调用jstat来查看运行时的内存,以及GC的频率等,然后通过jstack查看线程是有阻塞、死锁、循环等,最后通过jmap生成的堆快照进行分析内存溢出的地方。

使用可视化工具的话:

如果是jConsole,可以通过内存窗口查看堆以及各个部分的内存情况,通过线程窗口可以查看线程是否等待、循环、死锁等情况。

是 同VisualVM可以定位到具体内存溢出的位置。通过VisualVM可以观察堆、新生代、老年代、永久代的情况,同样通过线程查看是否有阻塞、循环、 死锁等情况。如果有内存溢出情况,首先是在监视窗口点击堆快照,生成快照,然后分析堆快照,通过分析堆转储上的线程,定位到具体执行的线程,然后就可以具 体分析线程里面的实例的数量以及大小,同时可以定位到程序中具体那一行代码,通过代码上下文具体是否写错了。

时间: 2024-10-22 12:15:48

用什么工具查看内存溢出,结合具体实例讲一下具体的过程的相关文章

OOM内存溢出java代码实例1

代码如下: 1 package com.github.mayangbo666.test; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class OOM1 { 7 public static void main(String[] args) { 8 List<Byte[]> list = new ArrayList<>(); 9 int i = 0; 10 try { 11 while (t

Python小工具-查看内存和CPU

import subprocess from time import sleep package = 'com.wangpos.by.cashier3' memory_name = 'adb shell dumpsys meminfo {} | findstr "Pss"'.format(package) memory = 'adb shell dumpsys meminfo {} | findstr "Pss"'.format(package) log_name

[转]Java内存溢出详解及解决方案

原文地址:http://blog.csdn.net/xianmiao2009/article/details/49254391 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码. 更严重的是内存溢出与数

内存溢出的解决思路

    内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存. 引起内存溢出的原因有很多种,常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码中存在死循环或循环产生过多重复的对象实体: 4.使用的第三方软件中的BUG: 5.启动参数内存值设定的过小: 内存溢出的解决方案:第一步,修改JVM启动参数,直接增加内存.(-Xms,-Xmx

内存泄漏和内存溢出的优化

内存泄漏: 对象在内存heap堆中中分配的空间, 当不再使用或没有引用指向的情况下, 仍不能被GC正常回收的情况. 多数出现在不合理的编码情况下, 比如在Activity中注册了一个广播接收器, 但是在页面关闭的时候进行unRegister, 就会出现内存溢出的现象. 通常情况下, 大量的内存泄漏会造成OOM. OOM: 即OutOfMemoery, 顾名思义就是指内存溢出了. 内存溢出是指APP向系统申请超过最大阀值的内存请求, 系统不会再分配多余的空间, 就会造成OOM error. 在我们

JVM学习—内存方区域与内存溢出异常

Java与C++中存在的一堵高墙就是又内存动态分配和垃圾回收技术所围成的,墙外面的人想进去,墙里面的人想出去. Java将内存控制权交给了JVM,所以程序员无需为每个对象手动释放空间,所以不容易出现内存泄露与溢出.但是一旦出现内存泄露或溢出,如果不了解虚拟机怎样分配内存的,那么排查将非常困难.Java虚拟机将执行java程序过程中管理的内存划分成若干个区域,每个区域有各自的用途以及创建和销毁的时间.这些区域有的是随着JVM进程启动而存在,有的则是通过用户线程的启动和结束而建立和销毁. 程序计数器

内存溢出

内存溢出(out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出.此时软件或游戏就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件. 内存溢出已经是软件开发历史上存在了近40年的"老大难"问题,像在"红色代码"病毒事件中表现的那样,它已经成为黑客攻击企业网络的"罪魁祸首". 如在一个域中输入的

(一)深入java虚拟机之内存溢出与分析

一.内存溢出程序 public class Test { public static void main(String[] args) { List<User> userList=new ArrayList<User>(); while(true) { userList.add(new User()); } } } public class User implements Serializable { /** * */ private static final long seria

Java内存存放区域与内存溢出异常(一)

**Java内存存放区域与内存溢出异常(一)** Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有着各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖于用户进程的启动和结束而建立和销毁,java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图一. 1.在这里先介绍程序计数器 程序计数器(Program Counter Register)是一块内存较小的内存空间,它的作用可以看作是当 前线程所执行的字节码的