Java 顶级分辨率大于Xmx

Java 顶级分辨率大于Xmx,java,jvm,Java,Jvm,环境:jdk8 垃圾:g1 第6段: -Xms30G-Xmx30G-XX:MaxDirectMemorySize=1G-XX:MetaspaceSize=500m-XX:MaxMetaspaceSize=1G 这个程序运行了很长时间 请注意,分辨率为60G或更高。我想知道出现此问题的原因。 谁有过这样的问题?帮助我-Xmx是最大堆大小。它不是最大进程大小。您正在使用其他资源,如线程、套接字、GUI、直接内存、共享库、元空间、内存映射文件 我会说;直接内存是最有可能的,尤其是它的最大大小默认情况下

环境:jdk8
垃圾:g1

第6段: -Xms30G-Xmx30G-XX:MaxDirectMemorySize=1G-XX:MetaspaceSize=500m-XX:MaxMetaspaceSize=1G

这个程序运行了很长时间 请注意,分辨率为60G或更高。我想知道出现此问题的原因。
谁有过这样的问题?帮助我

-Xmx是最大堆大小。它不是最大进程大小。您正在使用其他资源,如线程、套接字、GUI、直接内存、共享库、元空间、内存映射文件

我会说;直接内存是最有可能的,尤其是它的最大大小默认情况下与堆相同,但正如@apangin指出的,您已将最大值设置为1 GB


我不知道有什么简单的方法可以确定使用了多少直接内存,但是在Oracle JVM上,您可以获得
java.nio.Bits\reservedMemory
,因为它具有当前分配的数量。

可以通过标准MBean
java.nio:type=BufferPool,name=[direct | mapped]
跟踪直接内存的使用情况。然而,在这个特定的问题中,直接内存不太可能是一个问题,因为OP设置
-XX:MaxDirectMemorySize=1G
@apangin-good-spot后来我查到glibc 2.12版本有几个竞技场内存管理的缺陷可能导致参数设置不生效或生效后内存继续往上涨:Bug 799327-MALLOC_ARENA_MAX=1在RHEL 6.2(glibc 2.12)中不起作用Bug 20425-glibc arenas中内存的不平衡和利用率低下可能导致内存膨胀和后续OOMBug 11261-MALLOC为多线程应用程序使用过多内存然后,我们考虑到将马洛克竞技场设置为4.已经影响了一些竞技场内存池管理上的一些性能,要继续使用马洛克竞技场参数,就需要升级格利伯的版本,升级完还不确定高版本的格利伯与其他包兼容性上有什么影响,毕竟是操作系统底层的包了,所以就直接使用了谷歌的tcmalloc替代操作系统自带的格利伯管理内存。有资料显示,使用tcmalloc以后,网络服务器的吞吐量得以提升(先尝试的杰马洛克但是启动后会影响操作系统命令的执行,所以,就用了tcmalloc):