記錄我的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,怎麼肥事呢...