您可以查看運行中作業的性能,包括Job Manager與運行Task Managers的CPU、內存和線程的使用情況,這可以協助您定位代碼問題,例如作業代碼是否存在問題、個別類是否初始化比較慢、個別類是否占用資源比較多等問題。本文為您介紹如何查看作業Job Manager和運行Task Managers的性能。
前提條件
其他阿里云賬號或RAM用戶共同使用Flink工作空間時,需要為阿里云賬號或RAM用戶授權,以進行查看作業性能等相關操作,詳情請參見項目空間授權。
使用限制
僅Flink計算引擎VVR 4.0.11及以上版本支持查看作業性能。
僅支持查看運行作業的性能,歷史作業不支持查看性能。
分析工具使用方式
火焰圖
火焰圖通常是基于采樣數據生成,可能無法完全反映程序的全部執行情況。使用火焰圖識別瓶頸時,應結合其他性能分析工具和實際的業務場景進行綜合判斷。通常您可以查看以下方面:
CPU耗時:通常頂層占據寬度比較大的函數消耗的CPU比較多,表示該類函數可能存在性能問題。
內存分配:查看不同類別分配的內存情況。
鎖耗時:查看鎖競爭、死鎖導致的性能下降問題。
ITimer:在相同時間間隔下,查看每個間隔內所有線程之間CPU的消耗情況。
通過火焰圖識別瓶頸的整體思路如下:
理解火焰圖的結構
火焰圖的每一層代表調用棧的一個級別。最底層是應用程序的入口點,而更高層則表示更深層次的函數調用。
關注火焰的寬度與出現頻率
在火焰圖中,每個“火焰”的寬度代表了函數在采樣期間的執行時間占比,更寬的火焰表示該函數占用了更多的CPU時間,這通常代表了潛在的性能瓶頸。有些函數的火焰可能不是最寬的,但如果它們頻繁出現在火焰圖中,這意味著它們被調用了很多次,累積起來也是一個性能問題。
分析火焰的位置
火焰圖的垂直位置可以告訴您瓶頸發生在調用棧的哪個級別。位于底部的寬火焰通常表示程序的早期階段或主要邏輯部分存在問題,而位于頂部的寬火焰可能指向具體的處理函數或庫函數。
結合實際代碼分析
一旦您通過火焰圖識別出了潛在的瓶頸,應該結合實際的代碼進行分析,查看這些熱點函數的實現,尋找可以優化的地方,比如減少循環次數、優化數據結構、減少同步操作等。
進行性能測試
優化代碼后,可以進行性能測試驗證優化效果。并比較優化前后火焰圖的變化,確保性能瓶頸得到了實質性的改善。
如果火焰圖中部分顯示UnKnown,說明您使用了native方法。因此沒有Java方法的名字是符合預期的,詳情請參見Unknown。
線程動態
進入性能查看頁簽。
Job Manager性能
在作業日志頁簽,單擊Job Manager頁簽下的性能查看。
運行Task Managers性能
在作業日志頁簽,單擊運行Task Managers頁簽下的Path, ID,單擊性能查看。
在線程動態頁簽,單擊目標算子操作列的采樣,采樣一段時間后觀察其線程棧。例如下圖為Gemini State訪問的線程棧。
Thread Dump
在作業日志頁簽,單擊運行Task Managers頁簽下的Path, ID。
在Thread Dump頁面,按算子名稱搜索,觀察線程棧是否在訪問State(線程棧持續在Gemini或RocksDB的訪問鏈路上)。
您可以在狀態總覽頁簽查看目標算子名稱。
相關文檔
作業智能診斷服務能夠幫您監控作業健康狀況,全面保障您的業務穩定可靠運行,詳情請參見作業智能診斷。
通過作業配置和Flink SQL優化兩方面提升Flink SQL作業性能,詳情請參見高性能Flink SQL優化技巧。