首页 > 其他分享 >学习笔记(一) netty jvm参数配置命令

学习笔记(一) netty jvm参数配置命令

时间:2022-09-30 17:22:39浏览次数:86  
标签:netty jvm 泄漏 笔记 参数 内存 io

命令 值范围 说明 备注
io.netty.leakDetectionLevel
  • DISABLED - 完成禁止检测内存泄漏,这个是不推荐。
  • SIMPLE - 如果buffer中出现1%的内存泄漏,打印错误日志,就是上面那样。但是日志 是看不到详细在什么位置出现了内存泄漏。鉴于性能考虑,这个是在生产环境中默认使用。
  • ADVANCED - 如果buffer的1%出现内存泄漏,打印错误,并且输出详细的内存泄漏信息。
  • PARANOID - 这个和ADVANCED输出的内容是一样的,但它会对每一次请求的buffer做检查。很适用于调试和单元测试。
 内存泄漏检测机制的日志等级

 

 

 

io.netty.allocator.type
  • unpooled:
  • pooled:
ByteBuf的分配器,默认值为ByteBufAllocator.DEFAULT,4.0版本为UnpooledByteBufAllocator。  
 io.netty.noPreferDirect
  • false 默认值,表示使用对外内存
  • true,表示使用堆内内存
这两个配置项配合使用,将第一个参数设置成 true  
io.netty.noUnsafe
  • false 默认值  netty自己通过unsafe接口来分配内存,这里前提是平台需要支持能访问unsafe api,如果不能将统一走java nio模式
  • true
 
io.netty.maxDirectMemory

独立的控制内存参数,默认为-1

 

如果不设置第一个参数则会使用第二个参数来控制。如果MaxDirectMemorySize仍没有设置,则默认使用java堆大小

堆外内存好处就是不受jvm的机制管制,能够缓解gc压力。但是坏处也显而易见:容易泄漏,且不好排查。如果不设置netty最大使用内存,默认能使用jvm堆大小的内存。如果我们java应用放在容器里面,则很容易因为忽略堆外内存的使用导致容器被OOM killer杀死。可以通过两个参数来控制内存使用:
-XX:MaxDirectMemorySize

设置 jvm的堆外内存参数

io.netty.allocator.type
  • Pooled模式:即是cache模式,类比jemalloc的java版实现。后续系列再详细介绍。数据结构自顶向下依次有:
    • PoolThreadCache(避免NIO线程内存操作竞争)
    • PoolArena(分配器)
    • PoolChunk(内存通过chunk来进行管理)
    • PoolSubPage(内存的最细粒度表示)
  • Unpooled模式:直接分配和释放内存,由netty直接调用Unsafe接口,相比Pooled模式来讲则简单直接了很多。
 是否使用cache模式 netty为了高性能,默认使用了cache来管理回收的内存,这样下次再分配时直接从cache中分配,而不用频繁地调用Unsafe接口

 

 

参考资料:

(1) Netty源码解析系列:参数篇 - 知乎 (zhihu.com)

(2) Netty 长连接服务及Netty之JVM调优_weixin_34025151的博客-CSDN博客

标签:netty,jvm,泄漏,笔记,参数,内存,io
From: https://www.cnblogs.com/sandyflower/p/16745591.html

相关文章

  • LINUX 系统操作笔记
    1、查看占用cpu最多的十个进程psaux|head-1;psaux|grep-vPID|sort-rn-k+3|head2、查看占用内存最多的十个进程psaux|head-1;psaux|grep-vPID|sort-rn-k+4......
  • 【学习笔记】联表查询和自连接
    联表查询和自连接 七种join理论 想要在多个表中查询数据的思路:分析需求,即想要查询哪些字段,以及这些字段来自哪些表确定使用哪种连接,即七种join中的哪一种......
  • 阅读笔记2
    以下为《代码大全2》的阅读收获第一处是关于如何改善软件质量。一种强有力的方法就是根据软件的各种外在特性和内在特性明确定义出软件质量的目标。这个步骤经常被忽......
  • PADS应用笔记:Layout隐藏线段方框和叉号
    问题用layout看图纸时方框和叉号太影响观感了,如何隐藏方法方框叉号......
  • adb笔记
    1、查找文件adbshellbusyboxfind.-name<文件名>模糊查询:adbshellbusyboxfind.-name<*关键字*>2、安装应用adbinstall<apk>3、卸载应......
  • PADS应用笔记:Layout怎么检测错误
    问题一边layout结束后要检查是否有问题,那如何启动设计验证呢方法选项栏选择验证设计然后根据需求对相关特性进行验证......
  • PADS应用笔记:Layout时怎么加泪滴焊盘
    问题画好的板子要给过孔和焊盘加泪滴,具体要怎么做呢方法现在设置中选择显示泪滴和生产泪滴然后随意选择一个线,右键选择泪滴属性先点添加(已经添加过的可以选择修改......
  • Python 字典学习笔记
    字典(Dictionary)字典(Dictionary)是一个无序、可变和有索引的集合。在Python中,字典用花括号{}编写,拥有键和值。'''单级实例操作classroom={'Jack':12,'Amy':11,'J......
  • 9月份读书笔记1
    importjava.util.Scanner;importjava.util.Random;importjava.math.BigInteger;publicclasssizeyunsuan{ //出题参数 Randomr=newRandom(); Strings[]=newStr......
  • 9月份读书笔记2
    importjava.util.Scanner;importjava.util.Random;importjava.math.BigInteger;publicclasssizeyunsuan{ //出题参数 Randomr=newRandom(); Strings[]=newStr......