美文网首页
Bookkeeper直接内存显示异常

Bookkeeper直接内存显示异常

作者: ShootHzj | 来源:发表于2021-03-04 21:57 被阅读0次

    前言

    我们的Bookkeeper出现了直接内存显示异常的问题,具体的表现为,prometheus接口处返回的jvm_memory_bytes_used返回为Nan

    jvm_memory_bytes_used{} Nan
    

    定位思路

    在bookkeeper中搜索代码,发现bookkeeper中的directMemory是根据netty的一个字段来进行统计的,这也就是说bookkeeper的directMemory统计,其实只能统计到netty占用的直接内存,并不能统计到程序消耗的所有堆外内存。

    这个问题,我提了个issue,接下来看看如何处理 https://github.com/apache/bookkeeper/issues/2637

    image-20210304172842789

    然后调试到这部分代码

    image-20210304172935209

    发现这里报错,提示

    java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
    

    需要添加java参数

    -Dio.netty.tryReflectionSetAccessible=true
    

    Netty为什么添加这个参数,是因为

    Reflective setAccessible(true) will produce scary warnings on the console when using java9+, while netty still works. That said users may feel uncomfortable with these warnings, we should not try to do it by default when using java9+.
    

    如果关闭,这使Netty无法使用其特殊方式进行调整和创建直接缓冲区,可能会有一些性能上的下降。

    还是建议大家在使用jdk9以上的时候,把这个参数打开。

    相关文章

      网友评论

          本文标题:Bookkeeper直接内存显示异常

          本文链接:https://www.haomeiwen.com/subject/lqllqltx.html