该程序没有明显的内存泄漏,当我观察它在我的机器中运行本地它工作正常。在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警告:尝试分配堆栈保护页失败。
答案 0 :(得分:0)
这清楚地表明您的堆空间已用完。因此,您可以尝试使用coomand java -Xms<initial heap size> -Xmx<maximum heap size>
据我所知,默认值为initial: 32M and maximum: 128M
。因此可以使其最大值为256M或512M。
有关Java VM的信息,请查看此信息。 http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html