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

來源:互聯網
上載者:User

記錄我的windbg調試之旅。

問題描述:

有個項目cpu跳的厲害,馬上請出windbg

1. adplus 抓包;

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

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

4. ~71s 切換到 該線程, !clrstack 查看Managed 程式碼,看看是哪個頁面,看到頁面是 imei_list.aspx;

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

0:071> !dsoOS Thread Id: 0x11ec (71)ESP/REG  Object   Name1d1af0d4 156bd9e8 System.String    <String is invalid or too large to print>

 

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%以下。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.