java - 尽管有足够的内存,但在 VPS 上获取 "java.lang.OutOfMemoryError: unable to create new native"

标签 java multithreading out-of-memory vps

我就是不明白为什么会出现这个错误。它并不总是显示,但一旦出现,我的应用程序就拒绝接受连接(无法创建新的套接字线程,以及我在 JAVA 应用程序中创建的其他线程,其中一些线程我使用 ThreadPool)。

top 和 htop 向我展示了 2048MB 中大约使用了 900MB。 并且堆内存也足够,大约有200MB空闲。

cat/proc/sys/kernel/threads-max 输出:

1196032

而且,几天前一切都运行良好,这是一款多人在线游戏,我们有超过 200 个在线用户(总共约 500 个线程)。但现在,即使有 80 个用户在线(~200 个线程),10 分钟或几个小时后,我的应用程序也会因 OutOfMemoryError 错误而崩溃。在这种情况下,我确实重新启动了我的应用程序,但它仅在很短的时间内有效。

我很好奇,如果 JVM 在 VPS 上表现奇怪怎么办,因为同一台物理机上的其他 VPS 也使用 JVM。这可能吗? 提供商是否有某种我看不到的限制? 或者是否存在某种服务器攻击?

我还应该提到,当这个错误发生时,有时 munin 无法记录数据大约只有 10 分钟。查看图形图像,只有空白,就像 munin 根本不起作用一样。正如 htop 告诉我的那样,此时还有大约 1 GB 的可用内存。

这也可能是我们的情况,我以某种方式在我的应用程序中产生了一个错误。并在我完成更新后开始收到此错误。但即便如此,我从哪里开始调试呢?

最佳答案

尝试增加堆栈大小(-Xss)

关于java - 尽管有足够的内存,但在 VPS 上获取 "java.lang.OutOfMemoryError: unable to create new native",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8358019/

相关文章:

java - 通过 DI 在 Spring Framework 中正确使用 LOG4J

java - Android 未处理的异常 : org. json.JSONException with ion

java - 执行器框架——生产者消费者模式

c - 它是如何工作的? pthread_cond_signal() 和 pthread_cond_wait()

c# - 当应用程序未使用那么多内存时如何获得 System.OutOfMemoryException

Java Swing - KeyListener

java - JDesktopPane 不会隐藏它的框架

java - 在java中将本地对象传递给线程是不好的风格吗?

python - 大pandas DataFrames上的外部合并导致MemoryError——如何与pandas进行 "big data"合并?

java - 无法执行 dex : GC overhead limit exceeded in Eclipse