我正在开发一个Java服务器应用程序,该应用程序过去可以在运行Debian的PC上正常运行。最近,我将其在具有macOS High Sierra的MacMini上投入生产。直到最近,一切似乎都可以工作好几周,直到最近,我几乎每天都收到一次随机的OutOfMemoryErrors。发生这种情况时,服务器应用似乎停止响应大多数请求,因此我需要将其杀死并重新启动。
发生这种情况时,在“活动监视器”上,我的服务器应用程序正在使用大约2GB或4GB,这远低于我为该应用程序设置的限制(-Xmx8G)。
我不知道应该去哪里解决此问题,我需要您的见识。
一些注意事项:MacMini具有16GB。服务器在Java SDK 1.8上无休止地运行。它在GNU屏幕下启动。该应用程序使用了大量的HashMap,并将Lucene与FSDirectory结合使用来对文档建立索引并管理查询。
编辑:下面是错误的示例:
Exception in thread "NRT Reopen Thread" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:717)
at org.apache.lucene.index.ConcurrentMergeScheduler.merge(ConcurrentMergeScheduler.java:553)
at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:2247)
at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:511)
at org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:293)
at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:268)
at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:258)
at org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:140)
at org.apache.lucene.search.SearcherManager.refreshIfNeeded(SearcherManager.java:156)
at org.apache.lucene.search.SearcherManager.refreshIfNeeded(SearcherManager.java:58)
at org.apache.lucene.search.ReferenceManager.doMaybeRefresh(ReferenceManager.java:176)
at org.apache.lucene.search.ReferenceManager.maybeRefreshBlocking(ReferenceManager.java:253)
at org.apache.lucene.search.ControlledRealTimeReopenThread.run(ControlledRealTimeReopenThread.java:226)