最近在研究Java程序内存问题跟踪,主要处理程序在上时间运行情况下各种 OutOfMemory 异常,将使用的工具和心得点滴记录在这里备忘
常用工具
JDK1.6版本自带很多丰富的内存/线程跟踪调试工具
jps命令,查看本机器所有Java进程vmid
jps -l
jstat命令,跟踪某一Java进程GC运行情况
jstat -gcutil [vmid] 2000 (每2秒刷新一次)
jmap命令,强制Java进程生成当前堆快照(dump文件)
jmap -dump:format=b,file=c:/xxx.bin [vmid]
jstack命令,生成虚拟机当前线程快照
jstack -l [vmid] > c:/xxx.txt
可视化工具:
jconsole
JDK自带
Eclipse Memory Analyzer
基于Eclipse框架开发,专用分析dump文件,可以从多种角度协助查找程序内存使用问题
VisualVM
基于NetBeans框架开发,独立下载,初次安装就是个框架,需要安装插件才能正常使用
VisualVM第一次启动会报一个异常(反正我这里第一次用一定报)
cannot find java 1.6 or higher
解决办法:到VisalVM安装目录 /etc/visualvm.conf 文件
将其中的 jdkhome 注释打开,并配置上本机JDK绝对路径即可
关于在VisualVM中监控远程服务的方法:
将如下代码保存文件,文件名命名为 jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
将此文件拷贝到远程服务器的JDK bin目录中,在保持服务运行状态下,启动命令行窗口,切换到JDK/bin目录,运行如下命令
jstatd -p 1099 -J-Djava.security.policy=jstatd.all.policy
在VisualVM客户机上,添加远程服务器的IP地址(默认jstat监控端口使用的就是1099),就可以实现远程监控了
处理OutOfMemery心得
几篇很有价值的参考博客
http://shuwen.iteye.com/blog/1150002
http://www.jvmer.com/jvm-xx-%E5%8F%82%E6%95%B0%E4%BB%8B%E7%BB%8D/
http://lzj0470.iteye.com/blog/723515
分享到:
相关推荐
在Java编程中,内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间,随着时间推移,系统可用内存逐渐减少,从而影响系统运行...
Java程序在运行过程中可能会遇到各种问题,如性能瓶颈、内存泄漏、线程阻塞等,这时,开发者需要有一种工具能够实时地对JVM进行监控和分析。Btrace就是这样一款强大的工具,它允许开发者在不重启Java应用的情况下,...
4. **使用内存分析工具**:当通过前面步骤难以定位问题时,可以利用专业的内存分析工具(如Optimizeit Profiler、JProbe Profiler等)来监控程序运行时的内存使用情况,帮助识别内存泄漏。 ### 内存分析工具的作用 ...
- 内存分析是识别和解决Java应用程序中的内存泄漏、过度对象创建和内存消耗过高问题的关键步骤。 - jProfiler7提供了详细的内存分配和存活周期视图,帮助开发者定位内存占用大的对象和可能导致问题的代码片段。 2...
虽然Java具有自动垃圾回收机制,但这并不意味着开发者可以完全忽视内存管理问题。事实上,Java同样面临着内存泄露的风险。本文将深入探讨Java内存泄露的原因、表现形式以及预防措施。 #### 二、Java内存回收机制 ...
`leaktracker`是一个专为Android和Java平台设计的内存泄漏跟踪库,它可以帮助开发者检测和定位应用程序中的内存泄漏,从而提高应用性能和稳定性。 在Android系统中,由于内存资源有限,及时释放不再使用的对象至关...
每个区域承担不同的内存管理职责,保证Java程序的稳定运行。 ##### 2.5 JVM内存模型详解 - **2.5.1 Java栈** Java栈用于存储局部变量和方法调用的状态,每个线程都有自己的Java栈,支持线程的独立执行。 - **...
字符集与编码问题是Java程序国际化和本地化必须面对的问题。正确理解和使用字符集和编码是避免数据错误和丢失的关键。了解Unicode与UTF-8的关系、字符集与编码的识别和转换也是Java开发者需要掌握的知识。 最后,...
通过JNI,Java程序能够利用C/C++等本地代码的高效性,同时保持Java的可移植性。 【JFreeChart库】 JFreeChart是一个开源的Java图形库,用于创建高质量的图表。在本系统中,JFreeChart可能被用来将监控到的系统数据...
Java内存泄漏是一个开发者在开发和维护Java应用程序时必须面对的问题。内存泄漏会导致程序占用越来越多的内存资源,从而影响性能,甚至导致程序崩溃。本文将深入讨论Java内存泄漏的解决方法,提供一些工具和技巧,...
Java程序内存溢出问题通常是由于程序在运行过程中消耗的内存超过了JVM(Java虚拟机)所能分配的最大内存,导致程序无法继续执行并抛出`java.lang.OutOfMemoryError`异常。这种异常通常分为几种类型,如堆内存溢出、...
Java程序在运行过程中,内存管理和性能优化是至关重要的环节。JProfiler是一款强大的Java性能分析工具,它提供了全面的内存监控、线程分析以及CPU性能剖析等功能,帮助开发者深入理解应用程序的运行状态,找出潜在的...
内存泄漏是程序开发中常见的问题,尤其是在Android和Java这样的垃圾回收(GC)环境中。LeakTracker是一个专为解决此类问题而设计的开源项目,它帮助开发者检测和追踪内存泄漏,从而提升应用性能和稳定性。 ...
你可以通过它查看Java程序的数量以及它们各自的进程ID,这对于进一步的监控和调试非常有用。 2. **jstat (Java Statistics Tool)** jstat是用于实时监控JVM内存和类装载的统计工具。它可以提供有关堆内存、垃圾...
- **飞行记录器(Flight Recorder)**:跟踪和诊断Java应用程序的性能问题。 #### 八、命令行参数 为了配置内存收集器,可以使用以下命令行参数: - **-Xms**:设置初始堆大小。 - **-Xmx**:设置最大堆大小。 - **...
Java的内存机制是Java编程中至关重要的一部分,它涉及到对象的生命周期、内存的分配与释放以及内存泄漏的问题。本文将深入探讨这些概念。 1. **Java内存管理** - **内存分配**:在Java中,内存的分配主要由程序...
然而,这并不意味着Java程序不可能出现内存泄漏。事实上,尽管Java的内存泄漏不同于C++,但它仍然存在,且可能导致系统性能下降甚至崩溃。 Java内存管理的核心是对象的生命周期,所有对象都在堆内存中分配。当一个...
它可以轻松地监控 Java 应用程序性能和跟踪 Java 中的代码。下面是如何利用 JConsole 观察分析 Java 程序的运行。 一、JConsole 概述 JConsole 是一个内置 Java 性能分析器,可以监控 Java 应用程序性能和跟踪 ...
内存溢出小程序是一种计算机程序,它在运行过程中出现了内存泄漏问题。内存泄漏是编程中常见的错误,尤其是在使用动态内存分配的语言如C++或C时。它发生在程序申请内存后未能正确释放,导致这部分内存无法被系统再次...