監(jiān)控工具在實踐中,我們用來監(jiān)控分析哪些內(nèi)容呢。我們往往需要根據(jù)理論知識,轉(zhuǎn)換為可行的方法。1 分析內(nèi)存l 分析對象的內(nèi)存分配情況
分析短時間對象占用內(nèi)存問題: 在內(nèi)存視圖類視圖,點擊”mark current values” 然后進(jìn)行相關(guān)的業(yè)務(wù)操作。 就可以知道各個類的內(nèi)存增長情況 分析長時間對象占用內(nèi)存情況: 先照快照 一定時間后再照快照 然后對比快照 分析大對象占用內(nèi)存情況 如果對象過大,往往是一次加載了過多的數(shù)據(jù),很多信息是沒用的。 可以考慮其他辦法減少加載過多的數(shù)據(jù)。 比如,列表一次把所有的用戶信息加載到內(nèi)存中,那么列表對象會非常大。 可以考慮分頁顯示,把部分用戶用戶加載進(jìn)來。
l 分配堆的情況 分析非堆區(qū) 主要是個jvm使用的,方法區(qū)、原生方法棧、常量池等。 不會發(fā)生溢出。 如果代碼過多,或者常量過多,將會占用非常大的空間。 分析堆區(qū) 堆分為,young區(qū)和old區(qū)。Young不會發(fā)生溢出的,old是有可能 發(fā)生溢出。 一般要監(jiān)控young區(qū)和old區(qū)的情況,來判斷是否這兩個區(qū)的配置 都合理,但是jprofiler沒有提供觀察各個區(qū)的功能。可以用 jconsole工具來查看。 所以,只能查看堆區(qū)的整體大小,來分析設(shè)置的堆區(qū)大小是否 足夠。 old區(qū)中,存活比較長時間的對象有靜態(tài)對象等。 分GC情況 查看頻率,如果過高,說明堆區(qū)不夠。 查看耗時,如果過高,說明堆區(qū)太大。 2 分析cpul 分析sql執(zhí)行cpu占用情況 從執(zhí)行SQL占用CPU比例比較高上分析 說明大部分時間都在占用執(zhí)行該sql,占用了大部分的cpu資源。 考慮是否有優(yōu)化的空間。 考慮是否有該sql是必要的,例如select sysdate from dual可以采用其它非sql的方式來取得時間。 從平均執(zhí)行SQL的時間上分析 如果平均執(zhí)行的時間過大,說明需要進(jìn)行優(yōu)化。一般都是毫秒級別,如果到了秒級別,往往需要分析問題。
l 分析url處理時間 從平均處理url的時間上分析 用戶的體驗的等待時間為:url處理時間+網(wǎng)絡(luò)傳輸時間+客戶端顯示時間 比如如果超過4秒,需要考慮該頁面的性能瓶頸。 從調(diào)用次數(shù)上分析 對于調(diào)用次數(shù)比較高的,說明大部分用戶的操作都集中在這些 頁面。 這些頁面是高并發(fā),進(jìn)行性能優(yōu)化的重點區(qū)域。 3 分析線程l 分析死鎖線程 如果檢查出有死鎖的線程。必須進(jìn)行分析死鎖的原因。 |
|
|