故障總結 CPU飆公升?我寫的?

2022-01-23 05:45:17 字數 1798 閱讀 3747

事故過程

昨天我做的乙個需求上預發布,剛上,準備讓測試同學驗證一下,就發現列表頁刷不出來,很快,cpu飆公升,報警郵件發個不停。

我當時沒有懷疑是我做的功能的問題,因為我做的這個功能在測試環境已經驗證過了。

但是後來leader匯出堆疊日誌,把導致cpu飆公升的方法發出來,發現就是我寫的乙個功能,當時的感覺是驚呆了。

事故分析

我拿到堆疊日誌,是如下乙個bin檔案

匯入到mat中(eclipse 的乙個外掛程式 memory analyzer).

下圖是堆疊報告的乙個概覽。

biggest objects by retained size: 這項顯示的是,堆疊日誌中物件的大小分部。 

actions下面有四項: 

histogram:這項顯示的是每個類物件的數量列表 

dominator tree: 列出最大的物件和它們儲存的東西 

top consumers:按照類和包分類列印出「最昂貴」的物件。  

duplicate classes:檢測被多個類load的類 

reports下面有兩項:

leak suspects:包括乙個洩露懷疑和系統概覽。  

top components: 列出了大小超過1%的大物件報告

這裡我直接點選了leak suspects, 檢視mat給我們生成的乙個洩露報告。

可以清晰的看到mat 認為的錯誤點。

根據這個提示 我們找到**

可以看到錯誤的**出現在方法的最後一行。如果兩個if條件都不滿足,程式就到達最後一行,相當於下面**。

@test

public void test2()

我測試了一下,上訴**對應的sql語句是:

select * from t;

相當於把整張表查出來了。在預發布環境,這張表有65萬條資料。測試環境 只有1800條資料。所以在測試環境不會發現問題,在預發布環境,一下子把整張表查詢出來,cpu自然會飆公升了。

解決方法

將這個方法改成下面這樣

事故總結

1. 首先是對mybatis plus 的 list() 方法要有足夠的認識

2. 單元測試要做好,每寫乙個方法最好都有對應的單元測試。如果這個方法有對應的單元測試用例,列印出對應的sql,這個問題就能在開發階段就解決

3. 壓力測試要做好。很多問題在測試環境不會出錯,但是一到預發布,正式就出錯了。就是因為壓力測試沒有做好。測試環境資料量小,很多寫法不會出現問題,但是預發布、正式環境,資料量大,使用者量也大,就會出現各種問題。

4. **qc也可以更加仔細一點。

分享我寫的CPU測試程式,看看你的CPU強勁嗎?

你是否很想知道自己的cpu到底效能如何?你是否覺得那些測試軟體太麻煩了?你是否覺得如果有免費的測試軟體就太好了?這個程式可以測試cpu整數效能 浮點數效能 快取記憶體效能和多工處理效能 還有什麼好想的呢?完全免費,綠色免安裝,簡單明瞭 記得測完之後把資料放上來,提供給大家作個比對 戀花蝶email ...

我寫的Javascript VBScript函式,

function selectbyval sel,val ooption document.createelement option sel.options.add ooption ooption.innertext all ooption.value var c val.split for b 0...

CPU的常見故障及處理方法

故障1 cpu溫度過高導致經常宕機 故障現象 電腦在啟動後,執行一段時間就會慢下來,而且經常出現無故宕機和自動重新啟動的現象。處理方法 cpu在排除了病毒和使用不當的原因後,應 檢查一下cpu和記憶體。cpu的效能是引起宕機的乙個常見原因 如果cpu的溫度過高就會導致宕機或重啟現象,可考慮更 換個好...