Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Kubernetes中的Java容器以更多内存为限制?_Java_Kubernetes - Fatal编程技术网

为什么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是容器可以消耗的内存上限。但几天后

我使用OpenJDK 11.0.8和Payara Micro和Wildfly 20在Kubernetes中运行不同的Java容器。资源的定义如下:

      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