作者mozzan (mozzan)
看板java
標題[問題] 觀察JAVA耗費資源的方法?
時間Fri Apr 4 15:54:42 2014
我們公司是用Java開發webmail,server端使用類似Tomcat作法
昨天我們公司的webmail server主機loading突然變大
檢查一下發現Java的部分,記憶體使用量衝到了1.3G。
雖然我是開發webmail的,但對這種系統性能調校完全初心,
後來有看到可以使用jconsole去遠端監看資源耗費的情況,
但還是不知道該如何著手和觀察,
故有以下幾個問題想請教:
1. 我該如何知道或觀察目前所有連線(thread)的記憶體使用、cpu使用、物件資源
甚至程式執行的狀況。
2. 當系統負載過高時(指java耗費過多資源),是否有緊急處理的機制? 因為像是昨天
負載變高導致寄信出現狀況,當然這和寫法有關。
3. jconsole的方法會讓server去listen某個port,想請問這樣會不會導致server負載過大
一般會長期開著嗎?
另外最近也在找這方面的書,有看到一本 直達Java虛擬機器 好像不錯
不知道有沒有這方面資料能分享呢?
不管是基礎或工具都OK
感謝大大閱讀文章
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.91.176
※ 文章網址: http://webptt.com/m.aspx?n=bbs/java/M.1396598086.A.E49.html
1F:推 del680202:jstack jmap prstat etc.. 04/04 16:12
2F:推 PsMonkey:我覺得應該先補行為 log,依此試圖 reproduce 然後才監看 04/04 16:31
3F:→ PsMonkey:這樣才不用考慮你的 3(難不成你想在 online 的機器上... 04/04 16:32
4F:→ mozzan:謝謝回答!雖然是online,但是是公司內部使用的,想說這樣才 04/04 16:49
5F:→ mozzan:能觀察真正使用者使用的狀況,否則測試機也很難真正反應狀 04/04 16:51
6F:推 qrtt1:沒有概念你們的用法對於 1.3g 是合理或不合理。 04/04 22:01
7F:→ mozzan:是過高,因為server已經有狀況了 04/04 22:43
8F:→ qrtt1:這樣還是沒說明這用量合不合理,單純聽起來只是 server 弱qq 04/04 22:55
9F:→ mozzan:當然也是server弱,但是因為這server就是出貨產品,所以 04/05 00:22
10F:→ PsMonkey:說不定就是需要 1.3G [茶] 04/05 00:24
11F:→ mozzan:硬體方面不可能動,另外我是不知道以前用量大概是到多少 04/05 00:24
12F:→ mozzan:其實我的重點也是想觀察資源的消耗 04/05 00:27
13F:推 hate9527:很難說合理不合理 我家的oracle javaw常常吃到2g呀 04/06 13:13
14F:推 del680202:觀察Old generation的使用量,如果full GC後是成長 04/06 19:58
15F:→ del680202:那大概就要注意了 04/06 19:59
16F:推 SansWord:我們有用 dynatrace 04/08 14:53
17F:→ mozzan:好像用工具無法得知各別Thread使用的記憶體,因為Heap 04/08 20:42
18F:→ mozzan:是共用的,但visualVm能觀察本機的process的每個thread 04/08 20:46
19F:→ mozzan:allocate heap size 04/08 20:54
20F:推 del680202:如果沒有要很即時的話...jmap可以把heap給dump出來 04/08 23:30
21F:→ del680202:搭配一些Profiling工具可以看thread當時的記憶體使用 04/08 23:31
22F:→ del680202:包含thread使用了那些object、object的value等資訊 04/08 23:33
23F:→ del680202:之前曾經配過yourkit去找memory leak跟deadlock問題 04/08 23:36
24F:推 loser5566:JavaMelody: 04/09 17:04
25F:推 kiwatami:我覺得可以先從程式檢查是不是該關閉的都有確實關好 04/12 00:12