为什么Kubernetes中的Java容器以更多内存为限制?
我使用OpenJDK 11.0.8和Payara Micro和Wildfly 20在Kubernetes中运行不同的Java容器。资源的定义如下:为什么Kubernetes中的Java容器以更多内存为限制?,java,kubernetes,Java,Kubernetes,我使用OpenJDK 11.0.8和Payara Micro和Wildfly 20在Kubernetes中运行不同的Java容器。资源的定义如下: resources: requests: memory: "512Mi" limits: memory: "1Gi" OpenJDK使用默认内存设置运行,这意味着堆比率为25% 所以我假设1G是容器可以消耗的内存上限。但几天后
resources:
requests:
memory: "512Mi"
limits:
memory: "1Gi"
OpenJDK使用默认内存设置运行,这意味着堆比率为25%
所以我假设1G是容器可以消耗的内存上限。但几天后,由于容器内存消耗缓慢但稳定地增加,超过了上限。特别是,正在增加的是非堆内存,而不是堆内存
所以我有两个问题:为什么非堆内存在增加,为什么container/jdk/gc
忽略了容器内存限制
测量示例
这是一些关于pod和内存消耗的示例数据,以说明这种情况
POD信息(我在这里跳过了不相关的数据):
使用kubectl top检查内存使用情况:
-$ kubectl top pod app-5df66f48b8-4djbs -n my-namespace
NAME CPU(cores) MEMORY(bytes)
app-587894cd8c-dpldq 72m 1218Mi
检查pod内的内存限制:
[root@app-5df66f48b8-4djbs jboss]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
1073741824
pod/jvm内的VM标志:
[root@app-5df66f48b8-4djbs jboss]# jinfo -flags <PID>
VM Flags:
-XX:CICompilerCount=2 -XX:InitialHeapSize=16777216 -XX:MaxHeapSize=268435456 -XX:MaxNewSize=89456640 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=5570560 -XX:NonNMethodCodeHeapSize=5825164 -XX:NonProfiledCodeHeapSize=122916538 -XX:OldSize=11206656 -XX:ProfiledCodeHeapSize=122916538 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseSerialGC
[root@app-5df66f48b8-4djbs jboss]#金佛-标志
虚拟机标志:
-XX:CICompilerCount=2-XX:InitialHeapSize=16777216-XX:MaxHeapSize=268435456-XX:MaxNewSize=89456640-XX:MinHeapDeltaBytes=196608-XX:NewSize=5570560-XX:nonnmethoddeahapsize=582525164-XX:nonprofieddeahapsize=122916538-XX:OldSize=11206656-XX:profiledcdeahapsize=122916538-XX:reserveddecachesize=25168240-XX:segmentedcache-XX:+UseCompressedClassPointers-XX:+UseCompressedDoops-XX:+UseSerialGC
POD/jvm内的堆信息:
[root@app-5df66f48b8-4djbs jboss]# jcmd <PID> GC.heap_info
68:
def new generation total 78656K, used 59229K [0x00000000f0000000, 0x00000000f5550000, 0x00000000f5550000)
eden space 69952K, 77% used [0x00000000f0000000, 0x00000000f34bfa10, 0x00000000f4450000)
from space 8704K, 59% used [0x00000000f4cd0000, 0x00000000f51e7ba8, 0x00000000f5550000)
to space 8704K, 0% used [0x00000000f4450000, 0x00000000f4450000, 0x00000000f4cd0000)
tenured generation total 174784K, used 151511K [0x00000000f5550000, 0x0000000100000000, 0x0000000100000000)
the space 174784K, 86% used [0x00000000f5550000, 0x00000000fe945e58, 0x00000000fe946000, 0x0000000100000000)
Metaspace used 122497K, capacity 134911K, committed 135784K, reserved 1165312K
class space used 15455K, capacity 19491K, committed 19712K, reserved 1048576K
[root@app-5df66f48b8-4djbs jboss]#jcmd GC.heap_info
68:
def新一代总计78656K,使用59229K[0x00000000f0000000、0x00000000F55500000、0x00000000F55500000)
eden空间69952K,77%已使用[0x00000000f0000000,0x00000000f34bfa10,0x00000000f4450000)
从空间8704K开始,59%已使用[0x00000000f4cd0000,0x00000000f51e7ba8,0x00000000F55500000)
到空间8704K,0%已使用[0x00000000F44500000,0x00000000F44500000,0x00000000f4cd0000)
终身发电总量174784K,使用量151511K[0x00000000F55500000,0x0000000100000000,0x0000000100000000)
空间174784K,86%已使用[0x00000000f5550000,0x00000000fe945e58,0x00000000fe946000,0x0000000100000000)
元空间使用122497K,容量134911K,提交135784K,保留1165312K
类空间使用15455K,容量19491K,提交19712K,保留1048576K
虚拟机元空间信息:
$ jcmd 68 VM.metaspace
68:
Total Usage - 1732 loaders, 24910 classes (1180 shared):
Non-Class: 5060 chunks, 113.14 MB capacity, 104.91 MB ( 93%) used, 7.92 MB ( 7%) free, 5.86 KB ( <1%) waste, 316.25 KB ( <1%) overhead, deallocated: 4874 blocks with 1.38 MB
Class: 2773 chunks, 19.04 MB capacity, 15.11 MB ( 79%) used, 3.77 MB ( 20%) free, 256 bytes ( <1%) waste, 173.31 KB ( <1%) overhead, deallocated: 1040 blocks with 412.14 KB
Both: 7833 chunks, 132.18 MB capacity, 120.01 MB ( 91%) used, 11.69 MB ( 9%) free, 6.11 KB ( <1%) waste, 489.56 KB ( <1%) overhead, deallocated: 5914 blocks with 1.78 MB
Virtual space:
Non-class space: 114.00 MB reserved, 113.60 MB (>99%) committed
Class space: 1.00 GB reserved, 19.25 MB ( 2%) committed
Both: 1.11 GB reserved, 132.85 MB ( 12%) committed
Chunk freelists:
Non-Class:
specialized chunks: 43, capacity 43.00 KB
small chunks: 92, capacity 368.00 KB
medium chunks: (none)
humongous chunks: (none)
Total: 135, capacity=411.00 KB
Class:
specialized chunks: 18, capacity 18.00 KB
small chunks: 64, capacity 128.00 KB
medium chunks: (none)
humongous chunks: (none)
Total: 82, capacity=146.00 KB
Waste (percentages refer to total committed size 132.85 MB):
Committed unused: 128.00 KB ( <1%)
Waste in chunks in use: 6.11 KB ( <1%)
Free in chunks in use: 11.69 MB ( 9%)
Overhead in chunks in use: 489.56 KB ( <1%)
In free chunks: 557.00 KB ( <1%)
Deallocated from chunks in use: 1.78 MB ( 1%) (5914 blocks)
-total-: 14.62 MB ( 11%)
MaxMetaspaceSize: unlimited
CompressedClassSpaceSize: 1.00 GB
InitialBootClassLoaderMetaspaceSize: 4.00 MB
$jcmd 68 VM.metaspace
68:
总使用量-1732台装载机,24910类(1180台共享):
非类:5060个块,113.14MB容量,104.91MB(93%)已使用,7.92MB(7%)空闲,5.86KB(你是如何测量的?什么是cat/sys/fs/cgroup/memory/memory.limit_in_bytes
在pod中?我添加了额外的测量数据以提供更多见解我再次更新了数据。你可以看到memory.limit_in_bytes是正确的(1Gi)但是有了kubectl top,我可以看到容器当前消耗了更多的内存,除非你用@
标记我,否则我不知道你在帖子中添加了什么。顺便说一句,你怎么知道堆外内存超过了1GB?
$ jcmd 68 VM.metaspace
68:
Total Usage - 1732 loaders, 24910 classes (1180 shared):
Non-Class: 5060 chunks, 113.14 MB capacity, 104.91 MB ( 93%) used, 7.92 MB ( 7%) free, 5.86 KB ( <1%) waste, 316.25 KB ( <1%) overhead, deallocated: 4874 blocks with 1.38 MB
Class: 2773 chunks, 19.04 MB capacity, 15.11 MB ( 79%) used, 3.77 MB ( 20%) free, 256 bytes ( <1%) waste, 173.31 KB ( <1%) overhead, deallocated: 1040 blocks with 412.14 KB
Both: 7833 chunks, 132.18 MB capacity, 120.01 MB ( 91%) used, 11.69 MB ( 9%) free, 6.11 KB ( <1%) waste, 489.56 KB ( <1%) overhead, deallocated: 5914 blocks with 1.78 MB
Virtual space:
Non-class space: 114.00 MB reserved, 113.60 MB (>99%) committed
Class space: 1.00 GB reserved, 19.25 MB ( 2%) committed
Both: 1.11 GB reserved, 132.85 MB ( 12%) committed
Chunk freelists:
Non-Class:
specialized chunks: 43, capacity 43.00 KB
small chunks: 92, capacity 368.00 KB
medium chunks: (none)
humongous chunks: (none)
Total: 135, capacity=411.00 KB
Class:
specialized chunks: 18, capacity 18.00 KB
small chunks: 64, capacity 128.00 KB
medium chunks: (none)
humongous chunks: (none)
Total: 82, capacity=146.00 KB
Waste (percentages refer to total committed size 132.85 MB):
Committed unused: 128.00 KB ( <1%)
Waste in chunks in use: 6.11 KB ( <1%)
Free in chunks in use: 11.69 MB ( 9%)
Overhead in chunks in use: 489.56 KB ( <1%)
In free chunks: 557.00 KB ( <1%)
Deallocated from chunks in use: 1.78 MB ( 1%) (5914 blocks)
-total-: 14.62 MB ( 11%)
MaxMetaspaceSize: unlimited
CompressedClassSpaceSize: 1.00 GB
InitialBootClassLoaderMetaspaceSize: 4.00 MB