Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教一下,k8s内使用zgc算法的java应用wss远大于rss的原因 #5

Open
janson653 opened this issue Jan 29, 2021 · 5 comments

Comments

@janson653
Copy link

janson653 commented Jan 29, 2021

现象描述

作者你好,我们有个java应用使用了zgc算法后,k8s监控看起来比较奇怪,wss将近是rss的3倍关系,有时应用还被k8s oomkiller的。rss = 725MB,wss=4.25GB
在看了你的书,内存管理一章后,猜测是multi-mapping导致的。

cat /sys/fs/cgroup/memory/memory.stat
cache 4056084480 
rss 762945536 
rss_huge 113246208
mapped_file 2646163456
swap 0
pgpgin 2913868
pgpgout 1764941
pgfault 3239721
pgmajfault 273
inactive_anon 2204684288
active_anon 1242574848
inactive_file 281550848
active_file 1090134016
unevictable 0
hierarchical_memory_limit 4831838208
hierarchical_memsw_limit 4831838208
total_cache 4056084480
total_rss 762945536
total_rss_huge 113246208
total_mapped_file 2646163456
total_swap 0
total_pgpgin 2913868
total_pgpgout 1764941
total_pgfault 3239721
total_pgmajfault 273
total_inactive_anon 2204684288
total_active_anon 1242574848
total_inactive_file 281550848
total_active_file 1090134016
total_unevictable 0

通过观察, wss 大概等于 total_cache + total_rss - total_inactive_file, 然后又通过smem查看内存映射情况
Note: linux里的RSS跟k8s的rss应该不一样

 ./smem -m
Map                                       PIDs   AVGPSS      PSS
/pinpoint-agent/boot/pinpoint-annotation     1        0        0
/pinpoint-agent/boot/pinpoint-bootstrap-     1        0        0
/pinpoint-agent/boot/pinpoint-bootstrap-     1        0        0
/pinpoint-agent/boot/pinpoint-bootstrap-     1        0        0
/pinpoint-agent/pinpoint-bootstrap-1.8.5     1        0        0
/pinpoint-agent/plugin/pinpoint-jdk-http     1        0        0
[vdso]                                       6        0        0
[vsyscall]                                   6        0        0
/usr/lib/locale/C.UTF-8/LC_ADDRESS           4        1        4
/usr/lib/locale/C.UTF-8/LC_IDENTIFICATIO     4        1        4
/usr/lib/locale/C.UTF-8/LC_MEASUREMENT       4        1        4
/usr/lib/locale/C.UTF-8/LC_MESSAGES/SYS_     4        1        4
/usr/lib/locale/C.UTF-8/LC_MONETARY          4        1        4
/usr/lib/locale/C.UTF-8/LC_NAME              4        1        4
/usr/lib/locale/C.UTF-8/LC_NUMERIC           4        1        4
/usr/lib/locale/C.UTF-8/LC_PAPER             4        1        4
/usr/lib/locale/C.UTF-8/LC_TELEPHONE         4        1        4
/usr/lib/locale/C.UTF-8/LC_TIME              4        1        4
/usr/local/openjdk-11/bin/java               1        8        8
/usr/lib/locale/C.UTF-8/LC_COLLATE           4        3       12
/usr/local/openjdk-11/lib/libextnet.so       1       12       12
/lib/x86_64-linux-gnu/libgcc_s.so.1          1       16       16
/lib/x86_64-linux-gnu/libutil-2.28.so        1       16       16
/pinpoint-agent/boot/pinpoint-commons-1.     1       16       16
/usr/lib/locale/C.UTF-8/LC_CTYPE             5        3       17
/usr/lib/x86_64-linux-gnu/gconv/gconv-mo     5        3       19
/lib/x86_64-linux-gnu/libbz2.so.1.0.4        1       20       20
/lib/x86_64-linux-gnu/libnss_dns-2.28.so     1       20       20
/usr/local/openjdk-11/lib/libmanagement.     1       20       20
/lib/x86_64-linux-gnu/librt-2.28.so          1       24       24
/usr/local/openjdk-11/lib/libjimage.so       1       24       24
/usr/local/openjdk-11/lib/libmanagement_     1       24       24
/usr/local/openjdk-11/lib/libzip.so          1       28       28
/tmp/hsperfdata_root/8                       1       32       32
/usr/lib/python2.7/lib-dynload/bz2.x86_6     1       36       36
/lib/x86_64-linux-gnu/libdl-2.28.so          5        8       40
/usr/local/openjdk-11/lib/libinstrument.     1       40       40
/pinpoint-agent/boot/pinpoint-bootstrap-     1       48       48
/tmp/libnetty_transport_native_epoll_x86     1       52       52
/lib/x86_64-linux-gnu/libresolv-2.28.so      1       56       56
/usr/local/openjdk-11/lib/jli/libjli.so      1       56       56
/usr/local/openjdk-11/lib/libsunec.so        1       56       56
/usr/local/openjdk-11/lib/libnio.so          1       60       60
/usr/local/openjdk-11/lib/libverify.so       1       60       60
/lib/x86_64-linux-gnu/libnss_files-2.28.     4       16       64
/bin/dash                                    1       80       80
/usr/lib/x86_64-linux-gnu/libstdc++.so.6     1       84       84
/usr/local/openjdk-11/lib/libnet.so          1       88       88
/lib/x86_64-linux-gnu/libz.so.1.2.11         2       46       92
/lib/x86_64-linux-gnu/libpthread-2.28.so     2       50      100
/usr/local/openjdk-11/lib/libjava.so         1      132      132
/lib/x86_64-linux-gnu/libm-2.28.so           2       74      148
/lib/x86_64-linux-gnu/ld-2.28.so             6       28      173
/lib/x86_64-linux-gnu/libtinfo.so.6.1        3       62      186
[stack]                                      6       86      520
/bin/bash                                    3      296      890
/lib/x86_64-linux-gnu/libc-2.28.so           6      155      934
/usr/bin/python2.7                           1     1576     1576
/usr/local/openjdk-11/lib/modules            1     4008     4008
/usr/local/openjdk-11/lib/server/libjvm.     1    13584    13584
[heap]                                       6     4645    27872
<anonymous>                                  6   124326   745956
/memfd:java_heap                             1  2554532  2554532

看到上面linux里的mapped_file跟/memfd:java_heap 占用比较接近,猜测是zgc的内存映射, 不清楚怎么验证。

问题

  1. 请问mapped_file跟/memfd:java_heap 是一个东西吗
  2. 请问/memfd:java_heap 这个内存占用是真的占用了这么多内存吗
  3. k8s内使用zgc,pod内存跟zgc堆内存如何配置
@raymondshe
Copy link

请问这个问题解决了吗?

@RussXia
Copy link

RussXia commented Mar 16, 2023

同问,这个最后有定位到问题原因吗

1 similar comment
@poorbarcode
Copy link

同问,这个最后有定位到问题原因吗

@YuChangTao
Copy link

根本问题ZGC使用Java堆的3个视图(“marked0”,“marked1”,“remapped”),即3种不同“颜色”的堆指针和同一个堆的3个虚拟内存映射。因此,操作系统可能会报告 3 倍大的内存使用量

@wilson-1024
Copy link

同问,k8s内使用zgc,pod内存跟zgc堆内存如何配置

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants