記乙個由gc引發的高cpu問題

2021-09-08 02:25:14 字數 920 閱讀 4030

記錄我的windbg除錯之旅。

問題描述:

有個專案cpu跳的厲害,馬上請出windbg

1. adplus 抓包;

2. windbg開啟檔案,執行 .load sos ;

3. 執行 !threads, 發現程序 71 和 77 有異常,gc這項為disabled;

4. ~71s 切換到 該執行緒, !clrstack 檢視託管**,看看是哪個頁面,看到頁面是 imei_list.aspx;

5. !dso,發現有個string報告如下錯誤:

0:071> !dso

os thread id: 0x11ec (71)

esp/reg  object   name

1d1af0d4 156bd9e8 system.string    

6. !objsize 得到如下結果,6.3m,不小的string啊,怪不得!do 列印不出來

0:071> !objsize 156bd9e8 

sizeof(156bd9e8) =      6346824 (    0x60d848) bytes (system.string)

7. 這次要看看**了,開啟專案,找到檔案,這個檔案業務很簡單:獲取某個使用者的手機imei串列表,把所有的imei串拼接起來,然後輸出,很簡單,不該有什麼問題啊,唯一的疑點,這個imei的列表有多大。

8. 連上資料庫,開啟過程,過程只有一條語句 select * from t_imei where userid = @userid, 如果userid = 0 會有多少資料呢,因為這個頁面傳進來的引數剛好和0,經查詢,得到超過 6000條記錄,難怪了。

現在終於明白了,因為這個也沒的頻繁訪問(約1次/秒 ), 每次都會產生 6.3m的string,gc不斷需要工作,導致了高cpu,簡單改了程式和儲存過程,一切ok了,cpu從40%下降到10%以下。

由乙個typedef問題引發的思考

同樣,可以像下面這樣隱藏指標語法 typedef char pstr intmystrcmp const pstr p1,const pstr p3 用gnu的gcc和g 編譯器,是會出現警告的,按照順序,const pstr 被解釋為 char const 乙個指向char的指標常量 而事實上,c...

由乙個經典布局問題引發的思考

相信每個前端玩家在初學css的時候都遇到過這麼乙個問題 如何實現乙個三欄布局。假設高度已知,左欄右欄寬度各300px 中間自適應。看似很簡單的乙個問題,但這麼簡單的乙個問題,可以體現出乙個前端玩家的段位水平。初級玩家的回答 1.浮動 2.絕對定位。中級玩家的回答 1.浮動 2.絕對定位 3.flex...

乙個由copyBean引發的血案

一次開發中使用輪子bean互轉突然發生了問題 new setdlevel 1 dto dto new dto dto beancopyutils.copybean dto.class system.out.println dto.getdlevel 列印出輸出結果 輸出結果卻變成null,怎麼肥事呢...