首页 > 其他分享 >comcat白名单(十)leak

comcat白名单(十)leak

时间:2024-04-15 15:46:32浏览次数:25  
标签:PlatformDependent0 netty comcat leak ALLOCATION internal io 白名单 ARRAY

0 为什么used不好用

PlatformDependent.usedDirectMemory始终返回-1

跟踪下来,io.netty.util.internal.PlatformDependent0#hasDirectBufferNoCleanerConstructor始终返回false 

 

关于 mxbean

https://blog.51cto.com/u_16175492/7224266

https://segmentfault.com/a/1190000044509636

因此netty所分配的直接内存大小,常规的监控手段无法监测,包括arthas、visualvm中的MBean、以及其他所有通过jmx获取直接内存数据的手段。

如果要监控,只能自定义实现,从PlatformDependent入手,网上已有不少资料。

 

关于 -XX:NativeMemoryTracking=detail

jcmd $pid VM.native_memory detail

 

public static byte[] allocateUninitializedArray(int size) {
return UNINITIALIZED_ARRAY_ALLOCATION_THRESHOLD >= 0 && UNINITIALIZED_ARRAY_ALLOCATION_THRESHOLD <= size ? PlatformDependent0.allocateUninitializedArray(size) : new byte[size];
}

先关注到了这里,有没有可能后来用jvm内存得?

debug

发现UNINITIALIZED_ARRAY_ALLOCATION_THRESHOLD=-1,为什么:

int tryAllocateUninitializedArray = SystemPropertyUtil.getInt("io.netty.uninitializedArrayAllocationThreshold", 1024);
UNINITIALIZED_ARRAY_ALLOCATION_THRESHOLD = javaVersion() >= 9 && PlatformDependent0.hasAllocateArrayMethod() ? tryAllocateUninitializedArray : -1;
logger.debug("-Dio.netty.uninitializedArrayAllocationThreshold: {}", UNINITIALIZED_ARRAY_ALLOCATION_THRESHOLD);
static boolean hasAllocateArrayMethod() {
return ALLOCATE_ARRAY_METHOD != null;
}

class io.netty.util.internal.PlatformDependent0$7 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @6d3a9b8b

--add-opens java.base/jdk.internal.misc=ALL-UNNAMED --illegal-access=warn

增加-Dio.netty.uninitializedArrayAllocationThreshold=1,再debug

 

确实走后门那个方法了,而不是new byte[],但是还是没压跨掉

 

3 再回到io.netty.util.internal.PlatformDependent0#hasDirectBufferNoCleanerConstructor始终返回false,既然io.netty.util.internal.PlatformDependent#usedDirectMemory返回-1,就表示没有用直接内存?

试试看

io.netty.util.internal.PlatformDependent0#DIRECT_BUFFER_CONSTRUCTOR  这个为什么一直是null

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

报错,增加

-Dio.netty.tryReflectionSetAccessible=true
 

成功压垮

 

参考:

https://www.jianshu.com/p/c915aced3396

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

https://zhuanlan.zhihu.com/p/654366685

jdk17 下 netty 导致堆内存疯涨原因排查 | 京东云技术团队

 

4 -Dio.netty.uninitializedArrayAllocationThreshold=100000

还是垮掉了

删除1中的两个config,一样

-XX:MaxDirectMemorySize=100k
-Dio.netty.tryReflectionSetAccessible=true

标签:PlatformDependent0,netty,comcat,leak,ALLOCATION,internal,io,白名单,ARRAY
From: https://www.cnblogs.com/silyvin/p/18136083

相关文章

  • Discover Memory Leaks and Optimize .NET
    DiscoverMemoryLeaksandOptimize.NETANTSMemoryProfilerv11.3.0nowletsyouidentifyandfixmemory-relatedissueswithinyour.NET8codebase.ANTSMemoryProfilerbyRedgateSoftwareisapowerfultooldesignedfor.NETdeveloperstoidenti......
  • 文件上传一-WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过9
    演示案例:PHP-原生态-文件上传-前后端验证PHP-原生态-文件上传-类型文件头验证PHP-原生态-文件上传-后缀黑白名单验证PHP-原生态-文件上传-解析配置&二次渲染PHP-原生态-文件上传-逻辑缺陷&函数缺陷#学习前必读:1、课前一定要明白:无文件解析安全问题上,格式解析是一......
  • 启动应用程序出现comcat.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个comcat.dll文件(挑选合适的版本文件)把它放......
  • Qt Visual Leak Detector 输出解析(三)
    1.使用方式在QT中使用VLD的方法可以查看另外几篇博客:QT使用VisualLeakDetector(方式一)QT使用VisualLeakDetector(方式二)QT使用VisualLeakDetector(方式三)本次测试使用的环境为:QT5.9.2,MSVC201532bit,Debug模式,VLD版本为2.5.1,VLD配置文件不做任......
  • Qt Visual Leak Detector 输出解析(四)
    1.使用方式在QT中使用VLD的方法可以查看另外几篇博客:QT使用VisualLeakDetector(方式一)QT使用VisualLeakDetector(方式二)QT使用VisualLeakDetector(方式三)本次测试使用的环境为:QT5.9.2,Debug模式,VLD版本为2.5.1,VLD配置文件不做任何更改使用默认配......
  • Qt Visual Leak Detector 输出解析(一)
    1.使用方式在QT中使用VLD的方法可以查看另外几篇博客: QT使用VisualLeakDetector(方式一)QT使用 VisualLeakDetector(方式二)QT使用 VisualLeakDetector(方式三) 本次测试使用的环境为:QT5.9.2,MSVC201532bit,Debug模式,VLD版本为2.5.1,VLD配置文......
  • QT Visual Leak Detector 输出解析(二)
    1.使用方式在QT中使用VLD的方法可以查看另外几篇博客:QT使用VisualLeakDetector(方式一)QT使用VisualLeakDetector(方式二)QT使用VisualLeakDetector(方式三)本次测试使用的环境为:QT5.9.2,MSVC201532bit,Debug模式,VLD版本为2.5.1,VLD配置文件不做任何......
  • Qt 使用 Visual Leak Detector(方式二)
    1.使用前的准备参考本人另一篇博客安装VisualLeakDetector下载vld-2.5.1-setup.exe并按步骤安装VLD。这一种使用方式的特点是,在一台电脑上安装完成后,需在项目pro文件中指明库及头文件的路径,然后在mian.cpp文件中#include"vld.h"。当把项目拷贝到别的电脑上编译......
  • Qt 使用Visual Leak Detector(方式三)
    1.使用前的准备参考本人另一篇博客安装VisualLeakDetector下载vld-2.5.1-setup.exe并按步骤安装VLD。这一种使用方式的特点是,在一台电脑上安装完成后,将VLD安装目录下的lib库及include文件拷贝到项目目录中,在项目pro文件中指明库及头文件的路径,并将vld.ini......
  • Qt 使用 Visual Leak Detector(方式一)
    1.使用前的准备参考本人另一篇博客安装VisualLeakDetector下载vld-2.5.1-setup.exe并按步骤安装VLD。这一种使用方式的缺点是,当把项目拷贝到别的电脑上编译运行时,需要按以下流程重新配置VLD环境。但优点是在一台电脑上配置完成后,用的时候十分方便,包含头文件就可以......