uptimejava
topios
vmstat 1編程
iostat 1網絡
dstatless
pidstat 1jsp
sar -n DEV 1maven
free -mtcp
jps -lv工具
jinfo -flags pidoop
jstat -gcutil pid 1s
查看gc.log
jstack -l
jstack -l 中查看是否有死鎖 #TODO
jmap -histor pid
編寫代碼時要在關鍵的位置
* 調用外部服務、遠程方式的參數、結果上打印log
* 一些關鍵的步驟,打印參數等
* 異常處理的地方,打印參數,異常棧
這樣就能夠在程序拋出異常的時候,經過異常棧以及咱們打印的參數快速的判斷是哪裏出現了問題。
Preconditions
類或StringUtils.isNotEmpty
、CollectionUtils.isNotEmpty
等進行 for (e in loop) { try { do loop } catch (Exception e) { log and exception handle } }
Collections.unmodifiableCollection
等。常常出現的狀況是,在本地開發沒有問題、或是在staging測試也沒問題,部署到線上啓動就報錯了。
這個時候仍是須要在編寫代碼時就提早注意,有哪些用到了依賴於環境的地方
如
* 服務依賴,各個環境的服務配置、服務是否存在
* 端口,是否和已有的程序的端口衝突了
* 權限,寫文件或者日誌目錄是否有權限
另外還有maven引用jar包衝突的,會出現NoSuchMethodError等錯誤
這個時候,找到哪一個類的版本不一致,在代碼中找到對應的依賴的jar包
經過mvn dependency:tree
| grep 進行查看有哪些地方引入了jar包 maven 採用的是按照聲明順序靠前的使用。 當能夠進行必定的調試時,只在staging環境或者有一個jsp頁面能夠調用java代碼, 可使用Class.forName(「xxx」).getClassLoader XXX.class.getResource(「xxx.yy.ZZZ」)來查看用的是那個地方的class文件 也能夠解壓jar包,使用javap -v -p -c 查看class文件內容 另外還有一些工具,像BTrace、housemd、greys來幫助咱們線上調試