gpt4 book ai didi

在 Red Hat 上运行时 Java 内存泄漏,但在 Mac OS X 上没有内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:02:59 24 4
gpt4 key购买 nike

我有一个 java webobjects 应用程序,它在 Red Hat 上运行时显示内存泄漏问题,但在 Mac OS X 上运行时我们没有这样的问题。JVM 是相似的。

Mac OS X 10.6.5 使用 Apple 的 java 1.6.0_22 64 位Red Hat EL 5.0 使用来自 Sun 的 java 1.6.0_20 64 位

我将其配置为在内存不足时执行堆转储,使用 eclipse 内存分析器工具对其进行分析表明问题出在代码的一部分,该代码创建了一个线程,该线程将 HTTP 请求发送到 Web服务。创建线程的原因是对请求实现超时,因为 Web 服务有时不可用。

有没有人有什么想法?

    WOHTTPConnection connection = new WOHTTPConnection(host, port);
WORequest request = new WORequest(strMethod, strQuery, strHttpVersion, nsdHeader, content, null);

WebServiceRequester theRequester = new WebServiceRequester(connection, request);
Thread requestThread = new Thread(theRequester);
requestThread.start();
try {
requestThread.join(intTimeoutSend); //timeout in milliseconds = 10000
if ( requestThread.isAlive() ) {
requestThread.interrupt();
}
} catch(InterruptedException e) {

}
requestThread = null;
if(!theRequester.getTfSent()) {
return null;
}
WOResponse response = connection.readResponse();

...

class WebServiceRequester implements Runnable {

private WORequest theRequest;
private WOHTTPConnection theConnection;
private boolean tfSent = false;

public WebServiceRequester(WOHTTPConnection c, WORequest r) {
theConnection = c;
theRequest = r;
}

public void run() {
tfSent = theConnection.sendRequest(theRequest);
}

public boolean getTfSent() {
return tfSent;
}
}

编辑:由 eclipse 内存分析器工具报告的泄漏类名:

1,296 instances of "java.lang.Thread", loaded by "<system class loader>" occupy 111,947,632 (43.21%) bytes.
1,292 instances of "er.extensions.eof.ERXEC", loaded by "java.net.URLClassLoader @ 0x2aaab375b7c0" occupy 37,478,352 (14.46%) bytes.
1,280 instances of "er.extensions.appserver.ERXRequest", loaded by "java.net.URLClassLoader @ 0x2aaab375b7c0" occupy 27,297,992 (10.54%) bytes.

最佳答案

我听说 WOHTTPConnection 已损坏,不应使用。 WOHTTPConnection 没有提供关闭连接的可靠方法。它在其他方面也不可靠。

解决方案是使用Apache HttpComponents HttpClient重写代码

关于在 Red Hat 上运行时 Java 内存泄漏,但在 Mac OS X 上没有内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com