Spring boot Java 应用程序在 Hyper-V 动态内存中行为异常



我有几个弹簧启动Java应用程序,当hyper-v配置动态内存时,它们间歇性地行为异常。我没有指定最小或最大 Java 内存选项,因为我不知道每个应用程序需要多少或多少,所以我更喜欢让 Java 为我做出决定。所有应用程序都启动并且似乎正在工作,但是有时它们只是停止响应,并且日志不会指示任何错误或任何资源不足。其他时候应用程序工作正常。我怀疑这与 hyper-v 的动态内存分配有关,但由于它有时会长时间工作,我不知道是什么原因造成的。当我为本地计算机运行它时,我没有遇到此问题,但是我没有在本地计算机上长时间运行。当我的应用程序运行时,VM 使用的内存在虚拟机看到的 50% 到 80% 之间,并且它似乎没有完全扩展到动态允许的最大 RAM 量。关于如何确定它是否与 hyper-v 动态内存相关的内存的任何想法?物理 Hyper-V 服务器运行 2012 R2,VM 运行 Windows Server 2016。Java 版本 1.8.0_71 Java SE 运行时内部版本 1.8.0_171-b11 Java 热点 64 位服务器 VM 内部版本 25.171-b11,混合模式。

我会检查您的 HV 中进程的大小。Java 将使用比堆更多的内存,因此如果您的堆是虚拟机的 80%,它可能会超过分配的内存并大量交换,这肯定会使进程看起来停止运行。 这很可能发生在 GC 上,使进程无响应。

我要检查的第一件事是发生这种情况时它正在执行多少 IO 读/写以及您的操作系统具有的可用内存。

最新更新