日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何解決JDK8小版本升級后性能下降的問題

Rokr_wireless_t ? 來源:openEuler ? 作者:openEuler ? 2021-07-26 14:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編者按:在升級 JDK8U 的小版本后(從 8u74 升級到 8u202),遇到性能劇烈下降的問題(性能下降 13 倍)。該應用是一個非常簡單的 Web 應用,且應用在 JDK 升級前后并無任何發(fā)布修復。

通常來說 JDK 小版本升級都是問題修改,不影響功能和性能使用,而應用性能劇烈下降一定是 JDK 的內部 bug。對于這樣明確由 JDK 引起的性能問題,該如何解決?

最常見的方法是通過工具分析 JVM 執(zhí)行過程,檢查函數(shù)執(zhí)行的情況是否發(fā)生變化,如果找到變化,則可以深入分析哪些因素引起了變化,并進一步得到根因。筆者使用 perf 工具分析 JVM 執(zhí)行時的熱點函數(shù),并對出現(xiàn)問題的函數(shù)進行剖析,使用函數(shù)插樁來分析函數(shù)的執(zhí)行次數(shù),發(fā)現(xiàn)不同版本行為差異的根源,并找到了引起問題的根因。希望讀者遇到性能問題時可以參照本文使用 perf 工具對問題進行定位。

工欲善其事,必先利其器。程序員在定位性能瓶頸的時候,要是有一個趁手的性能調優(yōu)工具,能一針見血地指出程序的性能問題,可謂事半功倍。

Linux 中最常用的性能調優(yōu)工具 Perf(Linux 系統(tǒng)原生提供的性能分析工具),使用 perf 先對應用(假設要采樣的應用為 JavaApp)進行采樣,使用 record 命令,如下:

perfrecordjavaJavaApp

另外 perf 能按出現(xiàn)的百分比降序打印 CPU 正在執(zhí)行的函數(shù)名以及調用棧,如命令:

perfreport-n

這種結果的輸出還是不直觀的,Linux 性能優(yōu)化大師 Brendan Gregg 發(fā)明了火焰圖(因整個圖形看起來像燃燒的火焰而得名),以全局的方式來看各個函數(shù)的調用時間分布,以圖形化的方式列出調用棧。

火焰圖是基于 perf 的結果生成的圖形,我們先了解一下怎么去看火焰圖。

X 軸表示被抽樣到的次數(shù)。理解 X 軸的含義,需先了解采樣數(shù)據(jù)的原理。Perf 是在指定時間段內,每隔一段時間采集一次數(shù)據(jù),被采集到的次數(shù)越多,說明該函數(shù)的執(zhí)行總時間長,可能的原因有:調用次數(shù)多,或者單次執(zhí)行時間長。因此,X 軸的寬度不能簡單的認為是運行時長。Y 軸表示調用棧。

如何從火焰圖看出性能的瓶頸在哪里?最有理由懷疑的地方,頂層的“平頂”。關于 perf 和火焰圖使用方法可以參官網(wǎng)http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html。

下面是我們利用火焰圖來定位問題的一次實戰(zhàn)。

火焰圖定位問題的實戰(zhàn)

問題場景

問題發(fā)生的場景是客戶端向服務器發(fā)起 http 請求,服務器返回數(shù)據(jù)給客戶端(這是一個非常簡單的服務交互)。我們發(fā)現(xiàn)使用 JDK 8u74 的性能要遠優(yōu)于 JDK 8u202 的性能,下表中統(tǒng)計了 20 次服務器的響應時長。

009cbc14-e029-11eb-9e57-12bb97331649.png

從響應時間來看,8u202 相比 8u74 性能下降 13 倍之多,由于應用本身并未做任何修改,所以考慮使用火焰圖來定位性能消耗的問題點。在 8u74 和 8u202 分別運行應用,并用 perf 的 record 抓取數(shù)據(jù)并生成火焰圖。

火焰圖定位

對比兩張火焰圖,使用 8u74 時 ClientHandshaker.processMessage 占比為 1.15%,而在 8u202 中這個函數(shù)占比為 23.98%,很明顯在 ClientHandshaker.processMessage 帶來了性能差異。

00c5357c-e029-11eb-9e57-12bb97331649.png

01225572-e029-11eb-9e57-12bb97331649.png

根因定位

兩者在這個 ClientHandshaker.processMessage 上的 cpu 消耗差異很大,繼續(xù)分析這個函數(shù)找到根因。

voidprocessMessage(bytehandshakeType,intlength)throwsIOException{ if(this.state>=handshakeType&&handshakeType!=0){ //...異常 }else{ label105: switch(handshakeType){ case0://hello_request this.serverHelloRequest(newHelloRequest(this.input)); break; //... case2://sever_hello this.serverHello(newServerHello(this.input,length)); break; case11:///certificate this.serverCertificate(newCertificateMsg(this.input)); this.serverKey=this.session.getPeerCertificates()[0].getPublicKey(); break; case12://server_key_exchange該消息并不是必須的,取決于協(xié)商出的key交換算法 //... case13://certificate_request客戶端雙向驗證時需要 //... case14://server_hello_done this.serverHelloDone(newServerHelloDone(this.input)); break; case20://finished this.serverFinished(newFinished(this.protocolVersion,this.input,this.cipherSuite)); } if(this.state

processMessage()主要是通過不同的信息類型進行不同的握手消息的處理。而在火焰圖中可以看到,JDK8u74 圖中,主要消耗在函數(shù) serverFinished()和 serverHello()上,而 JDK8u202 主要消耗在函數(shù) serverHelloDone()和 serverKeyExchange()。

在介紹火焰圖的時候,我們有提到,X 軸的長度是映射了被采樣到的次數(shù)。因此需要進一步確定消耗:函數(shù)單次執(zhí)行耗時過長而成為熱點,還是因為頻繁調用函數(shù)導致函數(shù)耗時過長而成為熱點。

可通過字節(jié)碼插樁(通過 Instrument 技術實現(xiàn)對函數(shù)的計數(shù),然后編譯成 agent,執(zhí)行應用時加載 agent,具體使用 Instrument 的方法可以參考官方文檔)查看函數(shù) serverHelloDone()的調用次數(shù)及執(zhí)行時間。

JDK8u202數(shù)據(jù) Executecount:253 Executecount:258 Executecount:649 Executecount:661 serverHelloDoneexecutetime[1881195ns] Executecount:1223 Executecount:1234 Executecount:1843 Executecount:1852 serverHelloDoneexecutetime[1665012ns] Executecount:2446 Executecount:2456 serverHelloDoneexecutetime[1686206ns] JDK8u74數(shù)據(jù) Executecount:56 Executecount:56 Executecount:56 Executecount:56 Executecount:56 Executecount:56

Execute time 是取了每 1000 次調用的平均值,Execute count 每 5000ms 輸出一次總執(zhí)行次數(shù)。很明顯使用 JDK8u202 時在不斷調用 serverHelloDone,而 74 在調用 56 次后沒有再調用過這個函數(shù)。

初始化握手時,serverHelloDone 方法中,客戶端會根據(jù)服務端返回加密套件決定加密方式,構造不同的 Client Key Exchange 消息;服務器如果允許重用該會話,則通過在 Server Hello 消息中設置相同的會話 ID 來應答。

這樣,客戶端和服務器就可以利用原有會話的密鑰和加密套件,不必重新協(xié)商,也就不再走 serverHelloDone 方法。從現(xiàn)象來看, JDK8u202 沒有復用會話,而是建立的新的會話。

水落石出

查看 JDK8u 161 的 release notes,添加了 TLS 會話散列和擴展主密鑰擴展支持,找到引入的一個還未修復的 issue,對于帶有身份驗證的 TLS 的客戶端,支持 UseExtendedMasterSecret 會破壞 TLS-Session 的恢復,導致不使用現(xiàn)有的 TLS-Session,而執(zhí)行新的 Handshake。

JDK8u161 之后的版本(含 JDK8u161),若復用會話時不能成功恢復 Session,而是創(chuàng)建新的會話,會造成較大性能消耗,且積壓的大量的不可復用的 session 造成 GC 壓力變大;如果業(yè)務場景存在不變更證書密鑰,需要復用會話,且對性能有要求,可通過添加參數(shù)-Djdk.tls.useExtendedMasterSecret=false 來解決這個問題。

后記

如果遇到相關技術問題(包括不限于畢昇 JDK),可以通過畢昇 JDK 社區(qū)求助。畢昇 JDK 社區(qū)每雙周周二舉行技術例會,同時有一個技術交流群討論 GCC、LLVM 和 JDK 等相關編譯技術,感興趣的同學可以添加如下微信小助手入群(請備注:Complier)。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • jdk8
    +關注

    關注

    0

    文章

    4

    瀏覽量

    2073

原文標題:使用 perf 解決 JDK8 小版本升級后性能下降的問題

文章出處:【微信號:wireless-tag,微信公眾號:啟明云端科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    迅為電子RK系列開發(fā)板SDK內核正式升級至6.1 LTS版本

    迅為RK3568、RK3588、RK3576、RK3562系列開發(fā)板,SDK內核從5.10版本正式升級至6.1 LTS版本
    的頭像 發(fā)表于 03-16 16:18 ?568次閱讀

    【工具升級】 I OrCAD X 全版本新功能匯總,高效搞定電路協(xié)同設計

    在電子電路設計領域,一款功能強大、適配協(xié)同工作的工具,能大幅提升設計效率與精準度。OrCADX系列版本更新,圍繞協(xié)作、易用性、仿真分析三大核心,為個人及小型設計團隊帶來全方位的功能升級。以下
    的頭像 發(fā)表于 01-16 21:43 ?1678次閱讀
    【工具<b class='flag-5'>升級</b>】 I OrCAD X 全<b class='flag-5'>版本</b>新功能匯總,高效搞定電路協(xié)同設計

    IvorySQL開源社區(qū)正式發(fā)布IvorySQL 5.0版本

    近日,IvorySQL開源社區(qū)正式發(fā)布IvorySQL 5.0版本。該版本基于PostgreSQL 18.0進行全面迭代升級,在Oracle兼容性上實現(xiàn)新突破,生態(tài)組件集成能力持續(xù)進階,同時深度適配云原生場景,同步提供全平臺安裝
    的頭像 發(fā)表于 12-04 10:06 ?931次閱讀
    IvorySQL開源社區(qū)正式發(fā)布IvorySQL 5.0<b class='flag-5'>版本</b>

    Quartus Prime Pro 25.1版本的安裝和使用

    如果用戶開發(fā)板是基于Agilex 3、Agilex 5等高階器件,則需要安裝高版本的Quartus軟件比如Quartus Prime Pro 25.1版本,這個版本在安裝包和license獲取(免費)等方面跟以往的Quartus
    的頭像 發(fā)表于 10-07 13:06 ?3191次閱讀
    Quartus Prime Pro 25.1<b class='flag-5'>版本</b>的安裝和使用

    Perforce QAC 2025.2版本更新:虛擬內存優(yōu)化、100%覆蓋CERT C規(guī)則、CI構建性能提升等

    【產(chǎn)品更新】Perforce QAC更新至2025.2版本,安裝路徑和許可證都有變化!重點:虛擬內存占用降低、100%覆蓋CERT C規(guī)則,C23支持增強、CI構建性能提升等。建議盡快評估升級。
    的頭像 發(fā)表于 09-09 14:40 ?834次閱讀
    Perforce QAC 2025.2<b class='flag-5'>版本</b>更新:虛擬內存優(yōu)化、100%覆蓋CERT C規(guī)則、CI構建<b class='flag-5'>性能</b>提升等

    開鴻Bot系列V5.0.1.10版本升級!

    開鴻Bot系列更新至V5.0.1.10版本,此次升級聚焦功能優(yōu)化及系統(tǒng)穩(wěn)定性提升,在分布式能力、文件分享、打印功能及界面顯示等方面進行了多項改進,同時修復了多個已知問題,進一步提升了系統(tǒng)的可靠性
    的頭像 發(fā)表于 08-08 18:58 ?891次閱讀
    開鴻Bot系列V5.0.1.10<b class='flag-5'>版本</b><b class='flag-5'>升級</b>!

    求助,關于STM32Cubemx 6.15版本生成工程的文件編碼的問題求解

    之前升級6.13和6.14版本的時候重新生成工程會將文件編碼強制轉換成UTF-8格式,導致中文注釋亂碼。但是在安裝文件夾下面的STM32CubeMX.l4j.ini文件里面添加一行
    發(fā)表于 07-29 12:31

    涂鴉OmniAI Foundation 2.2版本正式發(fā)布:AI智能體全面升級,響應速度迅猛提高40%

    7月17日,涂鴉OmniAIFoundation正式升級至2.2版本!本次迭代的核心亮點,在于我們對AI智能體技能進行了全面升級,顯著提升了系統(tǒng)在內容理解、多技能協(xié)同以及泛化溝通方面的能力,讓AI
    的頭像 發(fā)表于 07-18 19:00 ?1274次閱讀
    涂鴉OmniAI Foundation 2.2<b class='flag-5'>版本</b>正式發(fā)布:AI智能體全面<b class='flag-5'>升級</b>,響應速度迅猛提高40%

    VA One 2024版本的關鍵升級

    自 2005 年發(fā)布以來,VA One 已廣泛應用于汽車、航空航天、船舶等多個行業(yè)領域。VA One 開發(fā)團隊每年都會對軟件進行功能迭代與優(yōu)化,目前最新版本為 VA One 2024。與以往版本
    的頭像 發(fā)表于 07-14 16:09 ?2004次閱讀
    VA One 2024<b class='flag-5'>版本</b>的關鍵<b class='flag-5'>升級</b>

    性能升級!開鴻Bot系列V4.1.2.78.002版本發(fā)布

    開鴻BotBook和開鴻BotMini迎來V4.1.2.78.002版本升級本次升級聚焦用戶體驗優(yōu)化重點優(yōu)化了系統(tǒng)功能、瀏覽器功能開發(fā)者體驗功能等帶來更流暢、更高效的操作體驗01系統(tǒng)功能優(yōu)化藍牙耳機
    的頭像 發(fā)表于 07-11 19:53 ?794次閱讀
    <b class='flag-5'>性能</b>再<b class='flag-5'>升級</b>!開鴻Bot系列V4.1.2.78.002<b class='flag-5'>版本</b>發(fā)布

    開鴻BotBook和開鴻BotMini新版本來了!

    今日,開鴻Bot系列迎來最新升級!開鴻BotBook升級至V4.1.2.77版本,開鴻BotMini升級至V4.1.2.71版本。此次
    的頭像 發(fā)表于 06-27 20:52 ?1513次閱讀
    開鴻BotBook和開鴻BotMini新<b class='flag-5'>版本</b>來了!

    兆松科技發(fā)布高性能RISC-V編譯器ZCC 4.0.0版本

    近日,兆松科技(武漢)有限公司(以下簡稱“兆松科技”)宣布正式發(fā)布高性能 RISC-V 編譯器 ZCC 4.0.0 版本。新版本性能優(yōu)化、廠商自定義指令支持和軟件庫等方面實現(xiàn)全面
    的頭像 發(fā)表于 06-27 14:48 ?3864次閱讀
    兆松科技發(fā)布高<b class='flag-5'>性能</b>RISC-V編譯器ZCC 4.0.0<b class='flag-5'>版本</b>

    全新AMD Vitis統(tǒng)一軟件平臺2025.1版本發(fā)布

    全新 AMD Vitis 統(tǒng)一軟件平臺 2025.1 版正式上線!此最新版本為使用 AMD Versal AI 引擎的高性能 DSP 應用提供了改進的設計環(huán)境。
    的頭像 發(fā)表于 06-24 11:44 ?1967次閱讀

    JDK8升級到21的問題集

    一、背景與挑戰(zhàn) 1. 升級動因 ?Oracle長期支持策略 ?現(xiàn)代特性需求:協(xié)程、模式匹配、ZGC等 ?安全性與性能的需求 ?AI新技術引入的版本要求 2. 項目情況 ?100+項目并行升級
    的頭像 發(fā)表于 06-06 16:49 ?980次閱讀

    摩爾線程發(fā)布Torch-MUSA v2.0.0版本 支持原生FP8和PyTorch 2.5.0

    近日,摩爾線程正式發(fā)布Torch-MUSA v2.0.0版本,這是其面向PyTorch深度學習框架的MUSA擴展庫的重要升級。新版本基于MUSA Compute Capability 3.1計算架構
    的頭像 發(fā)表于 05-11 16:41 ?1910次閱讀
    双流县| 安泽县| 临汾市| 保定市| 方城县| 临泉县| 静宁县| 金山区| 大理市| 大港区| 白玉县| 丰镇市| 南岸区| 延津县| 滦平县| 汶川县| 准格尔旗| 嘉荫县| 三江| 凉山| 元氏县| 廉江市| 隆昌县| 沙坪坝区| 息烽县| 高要市| 新龙县| 望城县| 湄潭县| 凤台县| 枣阳市| 桂阳县| 龙里县| 枣强县| 建瓯市| 郯城县| 荆门市| 石楼县| 交口县| 凤凰县| 五台县|