成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不經意的兩行代碼把CPU使用率干到了90%+ 沒源碼怎么排查?

開發 前端
arthas profiler比較適用CPU使用率持續較高的場景。通過對熱點火焰圖的分析,NoSuchMethodException異常相關代碼占用了很多CPU時間。

背景介紹

某同學反映某個應用ECS CPU使用率90%+,希望分析下原因。
該應用使用schedulerx來做定時任務執行,每隔一小時執行一次,每次執行5分鐘左右,執行任務期間CPU使用率90%+。

問題現象

圖1 ECS監控指標

ECS配置是4c8g,從上圖來看系統負載已經非常高了。

分析過程

尋找熱點代碼

arthas profiler比較適用CPU使用率持續較高的場景。通過對熱點火焰圖的分析,NoSuchMethodException異常相關代碼占用了很多CPU時間。

圖2 熱點火焰圖

上圖紅框中NoSuchMethodException展開后如下圖:

圖2 異常火焰圖

分析異常

ClassUtils

從上圖可以看出org.springframework.util.ClassUtils.getStaticMethod調用了Class.getMethod,Class.getMethod拋出了NoSuchMethodException,代碼如下。

圖3 ClassUtils.getStaticMethod

為了進一步定位問題,需要知道ClassUtils.getStaticMethod方法的入參:

圖4 arthas watch

?從上圖看出ClassUtils.getStaticMethod方法入參分別是:**clazz:java.util.Date;_methodName:_valueOf;args[0]:**java.sql.Timestamp。上面圖片只是截取了一部分,其中methodName還有of、from。

ObjectToObjectConverter

調用ClassUtils.getStaticMethod的地方是org.springframework.core.convert.support.ObjectToObjectConverter.determineFactoryMethod:?

圖5 ObjectToObjectConverter.determineFactoryMethod

調用ObjectToObjectConverter.determineFactoryMethod的地方是ObjectToObjectConverter.getValidateMember:

圖6 ObjectToObjectConverter.getValidateMember

雖然java.sql.Timestamp是java.util.Date的子類,但是從上面代碼可以看出進行了很多次無效的調用。

定位業務代碼

為了更準確的定位相關業務代碼,我們需要知道拋出NoSuchMethodException的線程棧,可以使用arthas stack,從線程棧我們可以知道在【哪個類哪個方法哪行】發出的調用。

stack org.springframework.util.ClassUtils getStaticMethod 'returnObj==null'

圖7 arthas stack

分析業務代碼

在我們沒有源代碼的情況,我們可以使用arthas jad反編譯定位到的類,進而分析業務代碼,到這里就可以具體定位到問題了。

圖8 業務代碼

gmt_created、gmt_modified在實體類中的定義:

圖9 業務實體類

異常場景回顧

查詢數據庫,數據庫返回ResultSet對象。

遍歷ResultSet,將ResultSet每一行映射到相應的業務實體類實例化業務實體類,根據ResultSet.getMetaData()獲取每一列的值并將該值set到實體類對應屬性上在將gmt_created、gmt_modified解析為java.sql.Timestamp類實例,接著使用ObjectToObjectConverter將java.sql.Timestamp轉換為java.util.Date的時候拋出了NoSuchMethodException。

異常場景復現示例代碼:

圖10 測試代碼

圖11 測試代碼

解決辦法

數據庫表中gmt_created、gmt_modified類型與實體類中對應字段類型的定義保持一致,可以解決異常。

延申閱讀

通過提高BeanPropertyRowMapper相關邏輯的緩存命中率可以進一步優化性能,如提前將轉換邏輯放到GenericConversionService類的converters中:

圖12 優化邏輯

另外可以通過自定義RowMapper來提高性能,因為BeanPropertyRowMapper并不是高性能的一種實現:

圖13 BeanPropertyRowMapper

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2015-11-30 18:15:33

華為

2019-01-15 15:04:54

CPU電腦使用率

2023-03-06 08:41:32

CPU使用率排查

2022-12-09 18:00:46

2011-03-03 18:50:52

用友謝志華U9

2014-06-12 20:00:14

CentOS 6Hadoop

2009-11-16 17:03:20

Oracle優化CPU

2024-04-11 13:27:19

Linuxtop命令

2021-05-31 15:53:57

CPU Top命令

2021-08-10 11:45:57

topCPULinux

2022-07-23 21:31:24

KubernetesLinux開源

2014-12-01 13:44:03

cgroupscpulimitlinux

2021-07-06 09:45:03

鴻蒙HarmonyOS應用

2010-04-27 10:32:54

Oracle優化CPU

2019-09-10 08:13:33

LinuxCPU內存

2021-11-11 16:46:02

CPU使用率 .NET

2020-07-08 07:00:00

LinuxCPU應用程序

2019-09-24 14:52:35

CPU負載Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩欧美电影 | 中文字幕在线一 | 成人免费激情视频 | 欧美视频区 | 精品一级| 爱爱无遮挡 | 欧美婷婷 | 人人爽日日躁夜夜躁尤物 | 羞羞色在线观看 | 在线中文视频 | 天天爽天天干 | 亚洲精品国产第一综合99久久 | 成人精品视频在线观看 | 国产精品区二区三区日本 | 亚洲精品在线免费 | 91中文在线观看 | 亚洲精品久久久一区二区三区 | 亚洲性人人天天夜夜摸 | 一区二区三区精品在线 | 国产精品免费在线 | 国产午夜精品视频 | 精品免费| 免费久久久久久 | 中文字幕乱码一区二区三区 | 亚洲一区二区三区观看 | 欧美视频精品 | 91中文字幕在线观看 | 黄色欧美视频 | 国产成人免费在线 | 激情网五月天 | 免费黄视频网站 | 夜夜爆操 | 婷婷综合色 | av网站在线播放 | 欧美日韩国产综合在线 | 九九视频网 | 久久伊人操 | 亚洲视频在线观看 | 精品久久国产视频 | 国产免费一区二区 | 国产成人福利在线观看 |