總結(jié)一下項目上線之后出現(xiàn)問題怎么排錯
一下幾種問題出現(xiàn)的比較多据途,其他的問題也會有 不過我不知道
- 進程退出
- OutofMemory
- CPU占用高
一 Java進程被kill
可以jps查看一下進程是否退出
進程退出有很多原因
二 oom
程序運行過程中 薯鼠,如果需要的內(nèi)存超過了jvm分配的內(nèi)存就會出現(xiàn)這個問題
JVM內(nèi)存模型
可以搜一個JVM內(nèi)存模型圖
jvm分非堆內(nèi)存(主要是程序啟動就加載的類所存放的空間)、堆內(nèi)存(這些是存放寫程序時候創(chuàng)建對象的空間)昔逗、棧內(nèi)存(線程占用的內(nèi)存,可以規(guī)定每個線程占用多少內(nèi)存)篷朵、堆外內(nèi)存(類似C語言自己申請的內(nèi)存勾怒,需要自己釋放,不被gc管理)声旺,4個相加就是程序運行的最小內(nèi)存
如果程序運行期間超過這個就會出現(xiàn)oom
堆內(nèi)存分edan笔链、survior、older 腮猖,老年代會根據(jù)回收機制發(fā)生GC
堆內(nèi)存不夠用的時候會經(jīng)常發(fā)生GC
list map存在堆內(nèi)存
如果使用很大的map可能會發(fā)生fullGC鉴扫,如果是oom問題的話可以檢查一下是不是使用了存很多數(shù)據(jù)的map。
三 cup過高
使用命令查看cpu使用情況 會顯示us和sy
us高的情況主要有:
死循環(huán)的時候就會占用很高的cpu澈缺;
程序邏輯循環(huán)過多 復(fù)雜度過高坪创;
出現(xiàn)FullGC。
sy高
io操作過多解決方法有:
可以使用緩存
異步io