【发布时间】:2014-02-06 07:01:06
【问题描述】:
该程序没有明显的内存泄漏,当我观察它在我的机器上本地运行时,它运行良好。在 VPS 上,它会在几个小时后崩溃,并显示一系列错误消息,如下所示。
线程“Thread-10422”java.lang.OutOfMemoryError 中的异常:Java 堆空间
如果发生内存泄漏,我不明白为什么会在几小时后而不是几分钟后发生这样的错误。我使用 VisualVM 等工具来观察程序的行为,并且内存始终保持不变。
有没有人知道我可以通过什么方法来调试它并深入了解它或如何避免它?
有没有不需要安装,可以通过ssh观察进程内存使用情况的工具?
编辑: 所有异常都没有堆栈跟踪,这很奇怪。但是错误发生在不同类的不同线程中。
at java.io.BufferedWriter.<init>(BufferedWriter.java:104)
at java.io.BufferedWriter.<init>(BufferedWriter.java:87)
at java.io.PrintStream.init(PrintStream.java:100)
at java.io.PrintStream.<init>(PrintStream.java:142)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:411)
at sun.net.www.http.HttpClient$2.run(HttpClient.java:457)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.http.HttpClient.privilegedOpenServer(HttpClient.java:454)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:521)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:240)
at sun.net.www.http.HttpClient.New(HttpClient.java:321)
at sun.net.www.http.HttpClient.New(HttpClient.java:338)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:935)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:914)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:801)
at java.util.HashMap.resize(HashMap.java:479)
at java.util.LinkedHashMap.addEntry(LinkedHashMap.java:431)
at java.util.HashMap.put(HashMap.java:402)
at org.jsoup.nodes.Attributes.put(Attributes.java:58)
at org.jsoup.parser.Token$Tag.newAttribute(Token.java:65)
at org.jsoup.parser.TokeniserState$34.read(TokeniserState.java:791)
at org.jsoup.parser.Tokeniser.read(Tokeniser.java:42)
at org.jsoup.parser.TreeBuilder.runParser(TreeBuilder.java:47)
at org.jsoup.parser.TreeBuilder.parse(TreeBuilder.java:41)
at org.jsoup.parser.HtmlTreeBuilder.parse(HtmlTreeBuilder.java:37)
at org.jsoup.parser.Parser.parseInput(Parser.java:30)
at org.jsoup.helper.DataUtil.parseByteData(DataUtil.java:102)
at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:498)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:154)
编辑: 设置最大内存后出现此错误
OpenJDK 64 位服务器 VM 警告:尝试分配堆栈保护页失败。
【问题讨论】:
-
这是网络应用还是独立应用?
-
请发布整个堆栈跟踪。
-
您能否为我们提供更多有关该应用程序的详细信息,例如其运行的平台以及它正在做什么的要点?任何产生这么多线程的东西听起来像是一个危险信号。
-
@supersam654 这只是线程 ID 我有大约 200 个线程正在运行。
-
它只是运行一些在线执行简单任务的线程。
标签: java memory memory-leaks vps