标签: j9

内存泄漏,没有对象数量或大小增加

在IBM iSeries系统上,我运行了一个Java程序 - 一个带有Web服务器组件的应用程序服务器,所有这些都是内部开发的.在32位或64位J9 JVM(IBM Technology for Java)上运行时,我有内存泄漏的症状.

请注意,在iSeries经典JVM,多个Sun/Oracle JVM和Linux JVM上运行此软件时,不会出现任何问题.哎呀,我经常在我妻子的入门级笔记本电脑的时间离开周运行相同的软件,而我在我的网站的工作 - 我可以向你保证,如果它是内存泄漏,将那个东西被发现.

如果我刚刚离开一个普通的香草系统运行空闲,没有配置应用程序(基本上就是邮件系统和Web服务器),堆只是继续缓慢增长,导致随着时间的推移被分配更多的内存,每个GC周期不相当于收集到以前的水平.对于没有问题的JVM,模式完全相同,除了那些GC扫描总是将堆减少到之前的GC级别.

在此输入图像描述

但是,如果我在稳定后启动JVM系统转储并在分配的堆显着增长后进行后续转储,则差异比较表明运行一周后不再有可达对象,而不是启动时.最近的一个,一周后显示6个额外的类加载和一些明确相关的对象.对所有活体物体的彻底评论都没有显示出任何让我意想不到的东西.

我已经尝试了优化的吞吐量和世代并发的垃圾收集器.

因此,根据作业的堆大小,我们似乎正在泄漏,并且根据堆转储,没有任何泄漏.

没有调用JNI方法(除了作为核心JVM的一部分运行的本机代码),它肯定是正在增长的堆 - 我可以清楚地看到IBM WRKJVMJOB信息以及在我的控制台中使用JMX bean报告日志文件.

到目前为止,我无法使用JVisualVM之类的JMX工具连接到活动JVM,因为尽管在正确配置时创建了侦听套接字,但是连接被拒绝,显然是在协议级别(TCP/IP堆栈显示已接受的连接,但是JVM反弹它).

我很困惑,不知道下一步该往哪里去.

编辑:只是为了澄清; 这些结果都是使用未经检测的JVM,因为我无法获得对此JVM的JMX访问权限(我们正在与IBM合作).

编辑2011-11-16 19:27:我能够在1823个GC循环中提取GC活动报告,其中包括Soft/Weak/PhantomReference计数的特定计数; 这些数字并没有出现失控增长的迹象.然而,小物体终身空间有显着增长(大物体终身空间是空的).它从9M增长到36M.

java memory-leaks j9 ibm-midrange

23
推荐指数
1
解决办法
3175
查看次数

下载IBM J9 JDK

我在IBM J9 JDK/JRE上有以下问题.

  1. 有没有人知道我可以下载最新的J9 JDK的位置?我找了它,找不到位置.
  2. IBM J9 JDK和Apache Harmony项目之间有什么关系?

谢谢.

java j9 ibm-jdk

13
推荐指数
1
解决办法
2万
查看次数

在哪里可以找到特定版本的IBM JDK/JRE for Windows?

我正在尝试使用一个对JDK敏感的Oracle软件与Websphere一起使用,我需要找到一些特定版本的IBM JDK来尝试.问题是IBM并没有像Sun/Oracle那样随时提供这些产品,而且我能够获得的所有版本都没有出于某种原因.

具体而言,我需要一个:
IBM的Java 5 SR9的视窗(理想)
的IBM Java 5 SR2为的Windows
的IBM Java 5 SR10的视窗

我怎么能直接从IBM获得这些?我的公司有一份Websphere的支持合同,如果我能告诉他们去哪里,我希望我们的Websphere工程师可以下载它.

java websphere j9

11
推荐指数
1
解决办法
4万
查看次数

IBM JVM(AIX)的Java UTF-8文件名

我无法理解IBM JVM java.io.File在JFS2文件系统上在AIX上执行UTF-8交易的方式.我怀疑有一个我忽略的系统属性,但我还没有找到它.

假设我有一个名为othér(其中é是U + 00E9或UTF-8字节0xc3 0xa9)的文件.文件名以UTF-8编码,由C程序创建:

char filename[] = { 'o', 't', 'h', 0xc3, 0xa9, 'r', 0 };
open(filename, O_RDWR|O_CREAT, 0666);
Run Code Online (Sandbox Code Playgroud)

如果我在Java中创建一个代表文件名的Unicode字符串,则无法打开它.此外,如果我File.listFiles()在Java中使用它,它坚持将其视为Latin1字符串.例如:

String expectedName = new String(new char[] { 'o', 't', 'h', 0xe9, 'r' });
File expected = new File(expectedName);
if (expected.exists())
    System.out.println(expectedName + " exists");
else
    System.out.println(expectedName + " DOES NOT exist");

for (File child : new File(".").listFiles())
{
    System.out.println(child.getName());
    System.out.print("Chars:");
    for (char c : child.getName().toCharArray())
        System.out.print(" 0x" + …
Run Code Online (Sandbox Code Playgroud)

java aix utf-8 j9

9
推荐指数
1
解决办法
4675
查看次数

IBM J9VM的默认堆大小是多少?

我安装了IBM的J9 VM(build 2.3,J2RE 1.5.0 IBM J9 2.3).获得OOM后,堆转储的大小为383MB.JVM有多少堆?

我问的原因是400MB堆转储似乎对我预期的默认64MB堆有点多,但我没有指定任何-Xm选项.J9是否使用不同的默认堆大小?如果是这样,我怎么知道它是什么?

java heap default j9

2
推荐指数
1
解决办法
6857
查看次数

Java - 读取现有进程的输出流

我需要读取在 IBM j9(Windows Mobile 的模拟器 JVM)上运行的进程的输出。我试过这个:

Process p = Runtime.getRuntime().exec("j9.exe");

BufferedReader br = new BufferedReader(new InputStreamReader(
      p.getInputStream()));

String stringLog;
while ((stringLog = br.readLine()) != null) {
   System.out.println(stringLog + "\n");
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为它返回了 的新实例j9.exe,而不是现有进程。

我需要获取从 j9console(现有进程的)记录到 System.out 的所有消息。我该怎么做呢?

java process j9

2
推荐指数
1
解决办法
1344
查看次数

标签 统计

j9 ×6

java ×6

aix ×1

default ×1

heap ×1

ibm-jdk ×1

ibm-midrange ×1

memory-leaks ×1

process ×1

utf-8 ×1

websphere ×1