Bookkeeper直接内存显示异常

2021-03-04  本文已影响0人  ShootHzj

前言

我们的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以上的时候,把这个参数打开。

上一篇 下一篇

猜你喜欢

热点阅读