系统不负责任 - 极端负载

系统不负责任 - 极端负载

今天我的服务器变得不负责任,我什至无法登录 ssh,但当我在上面运行我自己的服务器应用程序时,我能够恢复“顶级”数据。

服务器正在运行,但不接受任何新连接,但我的应用程序仍在向我的 Web 界面发送“top”命令的输出:2% CPU 使用率 0.0% wa load 110 ?如何 ? 顶部

我在系统日志中发现了一些可疑的内容: https://pastebin.com/u8kLCJEM

它出现了大约 10 次,然后当我来时(1 小时后)系统日志中没有更多消息,我只是截取了顶部(110 负载)并完全重新启动了服务器,一切正常。但我想知道为什么我的服务器崩溃以及如何防止它发生?

答案1

我在您的系统日志中没有看到任何非常可疑的内容。

我能看到什么:

  • 你有一个 JVM(java 虚拟机),占用了 ≈ 64GB RAM
  • 您有 64 GB 物理 RAM
  • 你没有交换

所以,这就是你的问题的原因。你的 JVM 正在泄漏。

您必须以某种方式杀死它,然后重新启动它。

你的 top 和 web 控制台工作的原因是有一点空闲内存,并且当你的 JVM 发疯时它们已经在运行了。因此,他们不需要分配太多的 RAM,而且他们使用的少量 RAM 也可以。

其他事情,你想开始的事情,就没那么幸运了。例如,您的 sshd 似乎无法分叉新进程(以及新 shell)。

JVM 喜欢吃很多 RAM,但不是那么多。 64GB已经是极限了。您的服务器托管的 Web 应用程序中有些问题。到底是什么,只有通过更深入地检查其上运行的 Web 应用程序才能找到它。

为了让你的系统正常工作,首先你必须以某种方式杀死那个 JVM。从命令行,一个简单的kill -9 13116任务就可以完成,但你现在没有命令行。

然而,命令行top 杀死进程(按 k,选择 PID),也许您的基于 Web 的顶部也存在相同的功能。

如果没有任何效果,您必须重新启动。


从长远来看:您应该使用 JVM 标志并限制其内存使用。在 .ini 文件中的某个位置,您可以为其设置标志,这些标志是:-Xmx<number> -Xms<number>。检查这些。详细信息取决于您的应用程序服务器。

这种 RAM 狂暴在 Java 中并不常见,其中有些东西不太对劲。只有知道你的应用程序才能准确地说出它是什么。

安全漏洞,我在你的日志中看不到。

相关内容