标签归档:OOM

BTrace详细介绍

最近排查线上OOM的异常时用到一个强大的动态跟踪分析工具BTrace,于是花了点时间研究了下用法,这里的内容基本是对官方说明进行的翻译,顺便加了点心得.

BTrace介绍

BTrace是一个Java的动态跟踪工具,BTrace的工作的基本原理是把跟踪的代码动态替换到被跟踪的Java程序内,其实现机制是Sun Attach API + BTrace脚本解析引擎 + Objectweb ASM + JDK6 Instumentation,项目主页是在这里,用户指南点击这里.

安装BTrace

BTrace的安装非常简单,首先你需要下载BTrace,最新的版本是1.2.2,然后解压至任意目录,设置好BTRACE_HOME后将bin目录加入至环境变量PATH中即可.
阅读全文…

JVM内存管理详解

JVM内存结构

JVM在运行java程序时将运行时数据划分成几种不同格式的数据,分别存储在不同的区域里,这些数据又统一称为运行时数据,而java虚拟机规范又将java运行时数据划分为以下6种.

  • pc寄存器
  • 严格来说这是一种数据结构,它用于保存当前正常执行的程序的内存地址,同时java程序是多线程执行的,所以需要一个记录员记录下每一个线程执行到哪一条指令.

  • 栈区
  • 栈总是和线程关联在一起的,每创建一个线程jvm就会为这个线程创建一个对应的java栈,而每个java栈中又会有多个栈帧,另外有一点需要注意,java栈与java线程是对应起来的,这个数据不是线程共享的,所以我们不用关心它的数据一致性.

  • 堆区
  • 堆区是存放java对象的地方,也是开发人员最应该关注的区域,堆区中所有对象都被线程共享,访问时需要关注线程同步问题.

  • 方法区
  • 方法区是存放类结构的地方,当class被加载到jvm时会被存放在不同的数据结构中,而其常量,域,方法数据,方法体,构造函数等都存放在此区域.

  • 运行时常量
  • 包括存放编译期数字常量,方法或者域引用,它是方法区一部分,其存储也受方法区规范约束,如果常量池无法分配,也会出现OOM异常.

  • 本地方法栈
  • 本地方法栈是为jvm运行native方法准备的空间,由于很多native方法使用c实现,所以也可以称作c栈.

阅读全文…

JVM参数大全

阅读全文…

JVM参数
-Xms 设置JVM初始化堆内存大小
-Xmx 设置JVM最大的堆内存大小
-Xss 设置JVM栈内存大小
-Xmn 设置young generation的堆内存大小,一般设置为Xmx的1/3
-Xmixed 混合模式执行
-Xint 解释模式执行
-Xbootclasspath: 设置zip/jar资源或者类(.class文件)存放目录路径
-Xbootclasspath/a: 追加zip/jar资源或者类(.class文件)存放目录路径
-Xbootclasspath/p: 预先加载zip/jar资源或者类(.class文件)存放目录路径
-Xnoclassgc 关闭类垃圾回收功能
-Xincgc 开启类的垃圾回收功能
-Xloggc: 记录垃圾回日志到一个文件
-Xbatch 关闭后台编译
-Xprof 输入CPU概要表数据
-Xfuture 执行严格的代码检查,预测可能出现的情况
-Xrs 通过JVM还原操作系统信号
-Xcheck:jni 对JNI函数执行检查
-Xshare:off 尽可能不去使用共享类的数据
-Xshare:auto 尽可能的使用共享类的数据
-Xshare:on 尽可能的使用共享类的数据,否则运行失败
非稳态选项使用说明
-XX:+<option> 启用选项
-XX:-<option> 不启用选项
-XX:+<option>=-<number> 给选项设置一个数字类型值,可跟单位,例如 32k,1024m,2g
-XX:+<option>=-<string> 给选项设置一个字符串值,例如-XX:HeapDumpPath=./dump.core