亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 DEFAULT_NUM_DIRECT_ARENA 派生自 PlatformDependent

為什么 DEFAULT_NUM_DIRECT_ARENA 派生自 PlatformDependent

慕無忌1623718 2021-12-22 18:52:02
希望我已經掌握了所有雜亂的細節,這有點微妙。默認情況下,io.netty.maxDirectMemory=MaxDirectMemorySize如果可能,Netty 通常會設置并啟用“無清理器”緩沖區。如果使用“無清理器”緩沖區,Netty 的直接內存和 Java 的“本機”直接內存將被獨立跟蹤——因為 Netty 需要自己計算以跟蹤Unsafe.allocateMemory“無清理器”緩沖區中分配的內存。這意味著在運行默認配置的 Netty 服務中為堆外數據預留的理論最大內存通常是粗略的io.netty.maxDirectMemory+MaxDirectMemorySize——或者2 x MaxDirectMemorySize默認情況下。這是一種悄悄地記錄在這里:https://github.com/netty/netty/blob/6cebb6069b3f30eedaddb12d2d22a6dd66277047/common/src/main/java/io/netty/util/internal/PlatformDependent.java#L132-L139所以這很好,即使它有點令人驚訝。但是當您嘗試將 io.netty.maxDirectMemory 和 MaxDirectSize 顯式設置為不同的值時,事情似乎變得有點奇怪。例如,我們試圖縮小我們的理論內存上限,以便與 cgroups 配合使用:所討論的服務被 OOM 殺死,所以我們變得有點激進,一旦我們意識到 MDMS/inmdm 之間的關系,設置 MaxDirectMemorySize和 io.netty.maxDirectMemory 顯式地最小化我們的上限——-XX:MaxDirectMemorySize=1g并設置-Dio.netty.maxDirectMemory=3221225472為啟用“無清潔器”直接緩沖區。我預計就 Netty 而言,這實際上是一個無操作更改,因為我們-XX:MaxDirectMemorySize=3g在明確設置io.netty.maxDirectMemory. 但是,我們觀察到報告的使用中直接內存大大減少。懷疑它可能與減小的 MaxDirectMemory 大小有關,我最終發現了這一點,我認為這可以解釋差異。https://github.com/netty/netty/blob/6cebb6069b3f30eedaddb12d2d22a6dd66277047/buffer/src/main/java/io/netty/buffer/PooledByteBufAllocator.java#L92-L97為什么要使用PlatformDependent.maxDirectMemory()這里(這將被設置為值MaxDirectMemorySize而不是推斷io.netty.maxDirectMemory),而不是如DIRECT_MEMORY_LIMIT(其被設置為顯式或推測值io.netty.maxDirectMemory)?一路上我可能誤解了一些東西,我不一定要抱怨,只是想了解:這是預期的行為嗎?疏忽/錯誤?因為人們現在依賴現有的語義而難以改變的東西?還有什么?
查看完整描述

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

這是一個錯誤......感謝您引起我的注意,建議修復:

https://github.com/netty/netty/pull/8452


查看完整回答
反對 回復 2021-12-22
  • 1 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號