VPS上的Java内存不足

VPS上的Java内存不足,java,memory,memory-leaks,vps,Java,Memory,Memory Leaks,Vps,该程序没有明显的内存泄漏,当我观察到它在我的机器中本地运行时,它工作正常。在VPS上,它会在几个小时后崩溃,并显示一系列错误消息,如下所示 线程“thread-10422”java.lang.OutOfMemoryError中出现异常:java堆空间 我不明白,如果内存泄漏,为什么这样的错误会在几个小时后而不是几分钟后发生。我使用VisualVM等工具来观察程序的行为,并且内存始终保持不变 有没有人知道我有什么方法可以调试这个问题并找出问题的根源,或者如何避免它 是否有一个工具不需要安装,并且可

该程序没有明显的内存泄漏,当我观察到它在我的机器中本地运行时,它工作正常。在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)
位于java.io.BufferedWriter(BufferedWriter.java:104)
位于java.io.BufferedWriter。(BufferedWriter.java:87)
位于java.io.PrintStream.init(PrintStream.java:100)
在java.io.PrintStream。(PrintStream.java:142)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:411)
http.HttpClient$2.run(HttpClient.java:457)
位于java.security.AccessController.doPrivileged(本机方法)
http.HttpClient.privilegedOpenServer(HttpClient.java:454)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:521)
http.HttpClient.(HttpClient.java:240)
http.HttpClient.New(HttpClient.java:321)
http.HttpClient.New(HttpClient.java:338)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:935)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:914)
位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:801)
在java.util.HashMap.resize(HashMap.java:479)中
位于java.util.LinkedHashMap.addEntry(LinkedHashMap.java:431)
位于java.util.HashMap.put(HashMap.java:402)
位于org.jsoup.nodes.Attributes.put(Attributes.java:58)
位于org.jsoup.parser.Token$Tag.newAttribute(Token.java:65)
位于org.jsoup.parser.TokeniserState$34.read(TokeniserState.java:791)
位于org.jsoup.parser.Tokeniser.read(Tokeniser.java:42)
位于org.jsoup.parser.TreeBuilder.runParser(TreeBuilder.java:47)
位于org.jsoup.parser.TreeBuilder.parse(TreeBuilder.java:41)
位于org.jsoup.parser.HtmlTreeBuilder.parse(HtmlTreeBuilder.java:37)
位于org.jsoup.parser.parser.parseInput(parser.java:30)
位于org.jsoup.helper.DataUtil.parseByteData(DataUtil.java:102)
位于org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:498)
位于org.jsoup.helper.HttpConnection.get(HttpConnection.java:154)
编辑: 设置最大内存后,我收到此错误


OpenJDK 64位服务器VM警告:尝试分配堆栈保护页失败。

这清楚地表明堆空间不足。因此,您可以尝试使用coomand
Java-Xms-Xmx
增加Java虚拟机的堆空间

据我所知,默认值为
初始值:32M,最大值:128M
。因此,可以使其最大值为256M或512M


看看这个,了解关于JavaVM的信息

这是一个web应用程序还是一个独立的应用程序?请发布整个堆栈跟踪。你能给我们一些关于应用程序的更多细节,比如它运行的平台和它正在做什么的要点吗?任何使这么多线程的操作听起来都像是一个红旗。@supersam654这正是我正在运行的大约200个线程的线程id。它只是在运行一些在线执行简单任务的线程。我不知道默认最大值是128M。在我的windows机器中,堆空间从500mb开始。我会尝试你的建议,并让你知道它是否有效。非常感谢。这就是我现在收到的错误OpenJDK 64位服务器VM警告:尝试分配堆栈保护页失败。您的RAM有多少?因此我认为,您没有足够的内存来运行200个线程。请尝试在另一台内存较多的计算机上运行相同的程序。请记住,错误发生在执行5小时后。不管怎样,代码的失败与内存不足并没有确切的关系,对吗?