![]() |
1
3
您在windows上看到的行为是正常的gc行为。应用程序正在生成垃圾,然后达到导致GC运行的阈值。gc释放了大量堆。然后应用程序再次启动。结果是堆占用中出现锯齿状。 这很正常。每个jvm的行为或多或少都是这样的。 Linux上的行为看起来像是有人试图在本机内存中分配大容量(77MB)的内存,但失败了,因为操作系统拒绝为JVM提供那么多内存。通常情况下,这是因为操作系统耗尽了资源;例如物理RAM、交换空间等。
这可能就是原因。Linux系统只有Windows系统的一半物理内存。如果您运行的netty有一个很大的java堆,并且您的linux操作系统没有配置任何交换空间,那么jvm可能正在使用所有可用的虚拟内存。它甚至可能发生在jvm启动时。 (如果我们假设windows和linux的最大堆大小设置相同,那么在windows上至少有4.5gb的虚拟地址空间可用于其他用途。在Linux上,只有0.5GB。0.5gb必须保持所有非堆jvm利用率…加上操作系统和其他各种用户空间进程。很容易看出你怎么能利用所有这些…导致分配失败。) 如果我的理论是正确的,那么解决方案就是更改jvm命令行选项,使-xmx更小。 (或增加可用的物理/虚拟内存。但是要注意通过添加交换空间来增加虚拟内存。如果虚拟/物理比率太大,则可能会导致虚拟内存“抖动”,从而导致糟糕的性能。) |
![]() |
Doua Beri · Netty SMTP代码-服务器端 7 年前 |
![]() |
Abhijit Sarkar · 如何解压缩通量(以及如何编写通量)? 7 年前 |
![]() |
elPsyChris · Vertx Eventbus无法发送节点间 7 年前 |
![]() |
St.Antario · Netty中的I/O线程是什么? 7 年前 |
![]() |
konstantin · Netty NIO:读取收到的消息 7 年前 |