
256
|
第十章:系統監控
"used" : 47586032
},
"ObjectPendingFinalizationCount" : 0
}
通常已用記憶體的數量會隨著時間增加,直到非常地接近保證記憶體,甚至極大值的
門檻,接著馬上因為發生記憶體回收(
garbage collection
)事件而往下降,並且回歸正
常值。事實上,這是它應有的運作原理,也是為什麼監控記憶體用量是困難的。
監控動態堆記憶體的另一個方法是針對一組取樣,去量測已用堆記憶體的中位數
(
median used heap
),而非量測特定時間點的絕對值。如果在一段時間以內(時間必
須夠長,長到至少發生過一次記憶體回收),中位數持續維持很高,很可能就不會改
變了,此時就可以觸發警訊。此外,如果您擔心誤報,想要確保真的有發生記憶體回
收,每個資源池都存在一些效能指標(
metrics
),可以說明完整記憶體回收事件的次
數,可以跟中位數檢查一起使用。
建議
:針對
NameNode
、
JobTracker
與
Secondary NameNode
的程序,執行上述的堆記
憶體監控。
除了可用記憶體以外,有些應用程式對於記憶體回收事件的週期(
duration of garbage
collection event
)很敏感。這對低延遲的服務來說是場災難,特別是因為
JVM
花了很
長的時間來處理記憶體回收,造成服務無法如期回應請求(
request
)的情形。對於像
NameNode
這類應用程式而言,這特別具有破壞力。在數秒鐘內無法對某個請求做出 ...