介绍IBM i上J9 JVM崩溃的常见原因

IBM Technology for Java(IT4J,又名 J9) 是 IBM 自己开发的 Java 虚拟机,被发布在 IBM 的各个操作系统上。IBM i 从 5.4 版本中开始引入 J9,从 6.1 开始,系统默认的 Java 虚拟机 是 J9,从 7.1 开始,C++lassic JVM 不再被支持,J9 是 IBM i 上唯一的支持的 Java 虚拟机。

在 IBM i 上 ,PASE(Portable Application Solution Environment) 提供了一个仿 AIX 的运行时环境,使得 AIX 或 其他 UNIX/Linux 应用程序只要做很少的改动甚至不修改就能够在 IBM i 上运行。J9 在 IBM i 上发布的核心代码是 AIX 版本的,所以它是在 PASE 环境中运行的。另外,J9 在 IBM i 上还有虚拟机的启动,停止与管理等功能。这些是通过 IBM i 的 CL 命令界面和少量的 ILE 支撑程序来实现的。所以与 Classic JVM 不同,在 IBM i 上调试与解决 J9 的问题需要从 ILE 和 PASE 两个环境同时入手分析。

J9 产生的几种日志

当运行在 J9 上的 Java 应用程序出现问题时,最有效的">分析问题方法是查看 J9 产生的各种日志。J9 通常会共产生 core dump, java core,snap trace 和 heap dump 四种日志。

Core dump 就是 Unix 或 Linux 系统上的内存转储文件,主要包括 J9 崩溃时的内存映像。

Java core 文件保存的是 java 应用程序在崩溃时或任一时刻关于 Java 运行环境的各种信息。包括 Java 虚拟机的参数,环境变量,内存段的分配情况,垃圾回收日志,各种内部锁的状态,各线程在当前时刻的运行栈,以及类加载状态等。

Snap trace 是 J9 记录 Java 虚拟机自身运行过程的日志,通常在 J9 崩溃时 Snap trace 中会包含崩溃前的部分日志。

Heap dump 文件是一个二进制文件,它保存了某一时刻在 Java 堆中所有对象的状态。这个文件最重要的作用就是分析 Java 堆内存泄露问题,heap analyzer,MAT 等工具都可以分析这种文件。

除了以上几种日志以外,当 J9 崩溃时,相应的会产生 IBM i 的日志:joblog 和 vlog。

导致 J9 崩溃的原因分析

Java 虚拟机非正常地停止运行可能是多种原因引起的,例如 Java 程序产生了无法处理的异常,虚拟机运行过程中产生不可恢复的错误,虚拟机所在的进程崩溃等。对于 Java 异常和虚拟机内部产生的错误,一般会有对应的错误消息指示发生了哪种问题,相对容易找到问题的根源。而对于虚拟机崩溃问题相对比较复杂。崩溃通常由以下几种原因产生:

在与 JNI 相关的本地代码中崩溃

JNI 是 Java 820.html">Native Interface 的缩写,即 JAVA 本地调用。从 Java1.1 开始,Java Native Interface(JNI) 标准成为 java 平台的一部分,它允许 Java 代码和其他语言写的代码进行交互。

本地代码在多种情况下都会用到 JNI。 而 JNI 的使用中有许多需要注意的问题(详见”使用 Java Native Interface 的最佳实践“)。这些本地代码对 JNI 不正确的使用往往会造成 J9 所在的 JOB 崩溃。使用 JNI 的方式包括:

Java 本地方法

在 IBM i 上一个 Java 方法可以用 ILE 或者 PASE 环境下的其他语言来实现。

使用 Invocation API

Invocation API 是 JNI 的一部分,它可以用来将 Java 虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用 Java 代码。同时也可以用其他语言通过 JNI 函数接口来调用 Java 代码。

JVMTI agent

JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的本地编程接口,是 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的更新版本。JVMTI 提供了可用于 debug 和 profiler 的接口;同时也支持监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等功能。JVMTI 提供一套本地代码接口,因此使用 JVMTI 需要我们与 C/C++ 以及 JNI 打交道。开发时一般采用建立一个 Agent 的方式来使用 JVMTI,它使用 JVMTI 函数,设置一些回调函数,并从 Java 虚拟机中得到当前的运行态信息,并作出自己的判断,最后还可能操作虚拟机的运行态。把 Agent 编译成一个动态链接库之后,我们就可以在 Java 程序启动的时候来加载它(启动加载模式),也可以在 Java 5 之后使用运行时加载(活动加载模式)。

时间: 2024-10-01 03:54:42

介绍IBM i上J9 JVM崩溃的常见原因的相关文章

介绍IBM i上提供的Java相关工具及分析方法

包括 i 6.1 及以上所提供的 WRKJVMJOB 等的相关工具以及 STRSST 中提供的相关宏的介绍.本文选择一些笔者在工作和实践过程中经常使用的功能和选项进行讲解,并穿插一些http://www.aliyun.com/zixun/aggregation/17253.html">常见问题的总结和思考. IBM Technology for Java(IT4J) 是 IBM 的 Java 虚拟机,它也是 IBM i 操作系统中的 Java 虚拟机的趋势.我们通常称此 java 虚拟机为

IBM i 上 Java Break Memory 介绍与问题分析

引言 很多使用 IBM Java 虚拟机的用户常常有这样一个疑问:我的程序是应该用 32 位 JVM,还是选择 64 位 JVM? 我们知道 ,  和 64 位 JVM 相比,32 位 JVM 具有如下优点: 启动速度快 运行速度快 对同一应用而言,占用的系统资源少 显而易见 , 32 位 JVM 是用户的首选.但是 , 采用 32 位寻址 , 32 位 JVM 的可用的内存空间远比 64 位的小得多 , 所以有些时候用户不得不使用 64 位 JVM.用户常会问这样的问题 : 我的 Java 作

使用 Java Print Service API 在 IBM i 上打印文档

Java Printer Service (JPS) 介绍 JPS (Java Print Service) 是一套为 Java 程序提供 IBM i 上打印服务的 Java 类库.它支持很多不同格式的文档打印,如:PDF,PS,PCL.你可以使用它提供的一些类 来编写关于打印的应用程序.使用时通常分为三步:首先选择合适的打印服务,然后指定打印数据的格式,最 后将打印作业提交给打印服务进行打印. 在 IBM i 服务器上,JPS 对应的 jar 包是 /QIBM/ProdData/OS400/J

如何使用Java Print Service API在IBM i上打印文档

JPS (Java Print Service) 是一套为 Java 程序提供 IBM i 上http://www.aliyun.com/zixun/aggregation/14291.html">打印服务的 Java 类库.它支持很多不同格式的文档打印,如:PDF,PS,PCL.你可以使用它提供的一些类来编写关于打印的应用程序.使用时通常分为三步:首先选择合适的打印服务,然后指定打印数据的格式,最后将打印作业提交给打印服务进行打印. 在 IBM i 服务器上,JPS 对应的 jar 包是

如何从 Classic JVM 迁移到 IBM J9 JVM

简介 从 IBM i 7.1 开始,IBM Classic Java Virtual Machine 不再被 IBM i 支持了.IBM Technology for Java Virtual Machine(又名 IBM J9 JVM)成为了唯一被支持的 JVM.这篇文章旨在阐述这两种 JVM 的区别,同时帮助用户和开发人员把他们的应用程序从 Classic JVM 移植到 J9 JVM.在 IBM i 上,所有版本的 Java 开发包(JDK)都以 Java 许可程序的 option 的形式

IBM 开源J9 JVM

在今年的 JavaOne 上,IBM J9 JVM 团队负责人 Dan Heidinga 分享了主题为< J9: Under the Hood of the Next Open Source JVM>的演讲,其中有提到 IBM 计划提供开源版本的 J9--OpenJ9.具体开源时间没有公布,不过有表示会尽量和 Java 9 同期. https://yqfile.alicdn.com/94b347c1fa7b866e874867d660447045d39f7466.png" >

对IBM i上的Electronic Service Agent(iESA)进行介绍

Electronic Service Agent 是一个可以运行在多种平台上具有类似功能的多个应用的统称,主要用于监控.管理系统资源.周期性地收集系统资源和系统状态并向 IBM 服务中心传输,以及对系统中出现的问题向 IBM 服务中心进行汇报.这样,当客户机器上出现问题的时候,IBM 服务中心就可以更快地作出响应:并且通过收集用户机器上的软硬件信息,IBM 可以更精准全面地理解用户系统平台的信息,从而对出现的问题进行更准确的判断和诊治.可以运行 Electronic Service Agent

从Classic JVM迁移到J9 JVM的参考依据和技术指导

从 IBM i 7.1 开始,IBM Classic Java Virtual http://www.aliyun.com/zixun/aggregation/39569.html">Machine 不再被 IBM i 支持了.IBM Technology for Java Virtual Machine(又名 IBM J9 JVM)成为了唯一被支持的 JVM.这篇文章旨在阐述这两种 JVM 的区别,同时帮助用户和开发人员把他们的应用程序从 Classic JVM 移植到 J9 JVM.在

在IBM i上远程调试Liberty Web应用

2012 年 6月,IBM 正式发布了 WebSphere Application Server V8.5 版本(简称 WAS V8.5).WebSphere Liberty Profile Server(简称 Liberty)在是 WAS V8.5 中最主要的新特性,它是一个基于 OSGi 内核,高模块化,高动态性的轻量级 WebSphere 应用服务器,其安装极为简单.启动非常快.占用很少的磁盘和内存空间,支持 Web.mobile 和 OSGi 应用的开发,一经推出就受到广大开发人员的青睐