最近公司的测试环境的Cassandra OOM了,借此机会顺便也回顾一下之前学习的JVM,在这总结一下。本文所指JVM是针对Sun的官方HotSpot VM。
首先了解一些基本JVM知识。
1、JVM主要内存结构
a、堆(heap)
堆主要分为新生代、老年代、永久代
新生代:存储java实例对象即数组,即:通过 new 生成的对象首先放入此区域,特殊情况也直接放入老年代
老年代:通过若干次YGC(新生代进行垃圾回收)以后,仍然活下来的对象会被放入此区域
永久代:Class的Meta信息以及运行期的常量池
b、栈(stack)
主要存放对象的引用以及局部变量等
2、java提供的jvm查看命令
在jdk的bin目录下面好多Java提供的命令可以直接使用,jvm相关的如下:
1、jps,类似于linux或unix的ps -ef,用于获取当前JVM的实例进程相关的信息,包括进程号,启动类全名,main方法参数、实例的设置的jvm参数等。
默认是只列出进程号,启动类SimpleName(就是不含包名)
可带参数如下:
-l 列出启动类全名,就是main方法所在的类全名
-m 列出main方法的参数
-v 列出启动的设置jvm参数
2、jmap,用于查看当前堆使用情况
使用示例:jmap 参数 jvm实例进程号
常用参数如下:
-heap 列出当前堆使用情况
-permstat 列出永久代统计情况,里面包含一个重要的统计,就是当前常量池,包含多少个String,并占多大内存
-help,列出帮助,显示其他可选的参数
3、jstat,列出当前GC相关
使用参数 -help获取更多官方信息
3、jvm的图形化工具排查
jconsole,visualVM,MemoryAnalyzerTool等
待续。。。先下班
相关推荐
1. **生成堆转储文件**:当JVM出现OOM或内存问题时,可以通过`-XX:+HeapDumpOnOutOfMemoryError` JVM参数让JVM自动生成堆转储文件,或者手动通过`jmap`命令生成。 2. **加载堆转储**:在HA或MAT中打开这个文件,...
MemoryAnalyzer(MAT)是IBM开发的一款强大的JVM堆内存分析工具,它能够帮助开发者深入理解内存消耗,识别内存泄漏和不必要的对象留存,从而有效地解决OOM问题。 MAT主要基于.hprof文件进行分析,这种文件格式是...
本篇将通过一个简单的OOM例子来探讨这个问题的发生原因、如何复现以及如何进行问题排查。 一、OOM现象与原因 当Java应用出现OOM时,JVM会抛出`java.lang.OutOfMemoryError`异常。这通常由以下几种情况引起: 1. *...
2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路; 4、基础知识讲解透彻、详尽; 5、JVM零基础也能听懂。 第一节:学习JVM的意义和目标 1.1 意义: 1.2 目标: 第二节:JVM内存模型 1.1 概念 1.2 ...
JVM性能优化与问题排查经验总结 本文总结了线上adplatform集群机器CPU飙升问题的排查经验,并对JVM性能优化与问题排查进行了详细的分析和总结。 JVM性能优化 在排查线上adplatform集群机器CPU飙升问题时,我们...
1. 在线排查:可以在线排查 JVM 的问题,包括线程安全问题、OOM 问题等。 2. JVM 观察:可以观察 JVM 的运行情况,包括 CPU 占用率、内存占用率、垃圾回收的信息等。 3. 线程定位:可以定位 JVM 进程中的线程问题,...
了解JVM内存结构及其功能对于优化Java应用程序的性能和排查内存问题至关重要。 首先,我们来详细探讨JVM的内存结构。在Java中,内存主要分为以下几个区域: 1. **程序计数器(Program Counter Register)**:每个...
- **内存溢出**(OOM):当JVM无法分配新的内存时发生,可能由于堆空间不足、方法区过大等原因。 - **内存泄漏**:程序中已不再使用的对象未能被GC回收,导致可用内存逐渐减少。 6. **JVM性能监控与故障排查工具*...
你有哪些手段来排查OOM的问题? 分析dump文件日志,查找问题 jmap 命令生成 dump 文件 使用 jcmd 命令生成 dump 文件 2.使用相关工具,比如阿里的 Arthas 工具进行分析 3.使用jmap -histo 命令排查
* Java 堆中的内存不足:如果 JVM 不能在 Java 堆中获得更多内存来分配更多 Java 对象,将会抛出 Java 内存不足 (Java OOM) 错误。 * 本地堆中的内存不足:如果 JVM 无法获得更多本地内存,它将抛出本地内存不足...
这本书提供了丰富的源码实例,让读者能够深入理解JVM的工作原理,并掌握其故障排查和性能调优的技巧。 首先,我们要明白JVM是Java语言的核心组成部分,它负责运行Java程序,提供跨平台的执行环境。JVM的主要组件...
理解并正确配置JVM参数对于优化应用程序性能、内存管理和故障排查至关重要。本文将深入探讨JVM的常用参数设置,以及它们如何影响Java应用程序的运行。 一、JVM内存设置 1. **堆内存**: - `-Xms`:初始堆大小,...
了解JVM的工作原理对于优化Java应用程序性能、排查问题以及深入理解内存管理至关重要。以下是对JVM工作原理的详细阐述: 1. **类加载机制**:JVM在运行时动态加载类,这个过程包括加载、验证、准备、解析和初始化五...
了解并正确使用这些JVM启动参数,可以帮助开发者提升应用程序的运行效率,防止内存溢出(OOM)等问题,以及进行有效的性能调优和故障排查。在实际开发中,应根据应用的特性和需求灵活调整这些参数。对于非标准和非...
Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了平台无关的运行环境。在JVM中,内存被划分为几个不同的区域,这些区域各自有不同的功能...理解JVM的工作原理对于优化Java程序性能、排查问题至关重要。
服务器排查思路和命令案例 服务器排查思路是指在服务器出现问题时,通过一系列的排查步骤和命令来定位和解决问题的过程。下面将针对磁盘不足、CPU 过高和 Tomcat假死三种常见的问题进行排查思路和命令案例的讲解。 ...
上周运维反馈线上程序出现了OOM,程序日志中的输出为 ...看线程名称应该是tomcat的nio工作线程,线程在处理程序的时候因为无法在堆中分配更多内存出现了OOM,幸好JVM启动参数配置了-XX:+HeapDumpOnOutOfMemoryE
在Java开发过程中,内存溢出(Out Of Memory,简称OOM)是...通过以上步骤,我们可以逐步排查并解决Java应用中的OOM问题,提高系统的稳定性和性能。记住,理解并掌握内存管理和优化技巧是每个Java开发者必备的能力。
5. **内存溢出**:如果堆或方法区无法分配足够的内存,会导致OOM(Out Of Memory)。通过调整JVM内存设置,如-Xms、-Xmx控制堆大小,-XX:MaxMetaspaceSize控制元空间大小,可以预防溢出。 6. **JVM调优**:通过监控...