Giter Site home page Giter Site logo

chenghanpeng / jdk11u Goto Github PK

View Code? Open in Web Editor NEW
32.0 32.0 13.0 139.16 MB

《新一代垃圾回收器ZGC设计与实现》一书参考的代码

License: GNU General Public License v2.0

Makefile 0.02% Shell 0.31% JavaScript 1.07% M4 0.10% sed 0.01% Roff 0.78% CSS 0.01% Python 0.06% Java 77.66% C++ 11.71% HTML 0.39% XSLT 0.22% Perl 0.01% C 7.26% Assembly 0.03% DTrace 0.01% GDB 0.01% Objective-C 0.38% Awk 0.01% Batchfile 0.01%

jdk11u's People

Contributors

chenghanpeng avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jdk11u's Issues

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

现象描述

作者你好,我们有个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堆内存如何配置

“在ZGC中强制开启偏向锁无效”的描述有误

平台: linux x64-64

版本:11.0.5

$ java -version
openjdk version "11.0.5" 2019-10-15

原文描述:

在ZGC中会重置该参数为false,禁止偏向锁性能更好,即使强制打开该参数也无效。

强制开启ZGC和偏向锁:

image

笔误

第12页,页尾的一行,一个小笔误。

用NextBitmap表示整个内存从Bottom到Next指针之前的标记状态。

应该是

之间

的标记状态。

请教一下,关于ZGC读屏障的部分,应该作何理解?

看了作者大大的书籍,首先收获良多,首先在这里表示感谢!

然后自己有一点思考,可能是我理解的有问题,怎么也想不通,希望能得到作者的解答,万分感谢!

无法联系到作者,于是通过提issue的方式问问题,在这里说声抱歉!

问题

如何判断bad color和good color?
image

网上资料:
网上的资料都说是通过4位颜色指针判断是否是bad color的,意思是这4位颜色指针都是0的情况下就是good color,其余情况下是bad color
image

我的理解

但是按照我的理解这4个颜色标志位不可能同时为0.
因为ZGC初始化之后,就会将全局视图设置为Remapped,后续的标记和转移,也会不停的在M视图和Remapped视图切换。
在Remapped视图创建对象,对象的地址视图就会被设置成Remapped
在M视图创建对象,对象的地址视图就会被设置成M
那么,哪来的0000呢?所以用判断对象的地址视图是不是0000来判断是不是good color行不通。

作者书籍:

在作者的书籍中,我翻阅了几遍,作者提到“判断该视图是否在当前视图中”,请问这句话应该如何理解?
image

error in table 5-37

图5-37 第二轮垃圾回收并发标记结束的内存状态图

image

第二轮垃圾回收并发标记结束时, 5‘ 和 8‘ 均从根节点可达,应该为活跃对象(灰色),同时应该出现在下面的标记信息表中。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.