|
命令
|
值範圍
|
説明 |
備註
|
|
io.netty.leakDetectionLevel
|
|
內存泄漏檢測機制的日誌等級
|
|
|
io.netty.allocator.type
|
|
ByteBuf的分配器,默認值為ByteBufAllocator.DEFAULT,4.0版本為UnpooledByteBufAllocator。
|
|
|
io.netty.noPreferDirect
|
|
這兩個配置項配合使用,將第一個參數設置成 true
|
|
|
io.netty.noUnsafe
|
|
|
|
|
io.netty.maxDirectMemory
|
獨立的控制內存參數,默認為-1 |
如果不設置第一個參數則會使用第二個參數來控制。如果MaxDirectMemorySize仍沒有設置,則默認使用java堆大小 |
堆外內存好處就是不受jvm的機制管制,能夠緩解gc壓力。但是壞處也顯而易見:容易泄漏,且不好排查。如果不設置netty最大使用內存,默認能使用jvm堆大小的內存。如果我們java應用放在容器裏面,則很容易因為忽略堆外內存的使用導致容器被OOM killer殺死。可以通過兩個參數來控制內存使用:
|
|
-XX:MaxDirectMemorySize
|
設置 jvm的堆外內存參數 |
||
|
io.netty.allocator.type
|
|
是否使用cache模式
|
netty為了高性能,默認使用了cache來管理回收的內存,這樣下次再分配時直接從cache中分配,而不用頻繁地調用Unsafe接口
|
參考資料:
(1) Netty源碼解析系列:參數篇 - 知乎 (zhihu.com)