使用async-profiler簡單分析zeebe 工作流引擎的性能


剛開始的時候直接使用的系統暴露的prometheus metrics,發現越高的版本反而性能越差,期間使用過了
perf 打算使用perf 生成火焰圖的,但是因為符號缺失,只找到了占用較高的任務,詳細的暫時沒有取到
以前大概知道一個工具perf-map-agent 可以用來生成缺失的符號,但是只是不太好,發現了async-profiler
工具,使用方便,支持的版本都,同時也支持基於容器的部署模型,但是容器運行暫時有點問題,所以直接
使用虛擬機運行,配置的分片為1,副本也為1

使用async-profiler 獲取指標

 
./profiler.sh -d 120 -o collapsed -f more8 `pid of java`
 
./FlameGraph/flamegraph.pl more8 > flamegraph8.svg
  • 效果

發現大部分的占用都是raft 的讀

 

 

幾個問題

  • 實際看到磁盤寫很大

從火焰圖我們可以看出讀取占用較多的時間,但是檢測磁盤的話,我們發現磁盤寫很大,可選的排查工具iostat 以及使用async-profiler
使用iostat 我們發現寫是偶然的很大,基本都在20M左右,和我們實際看到的情況一致
使用async-profiler 可以使用tree 模式 ./profiler.sh -d 30 -t -o flat,tree -f zeebe-demo.txt pid of java 我們會發現有寫,但是占用的cpu
時間並不高,如下:

 

 

  • 分區與線程的關系

官方有一個介紹是關於分區數與線程的關系,一個分區占用2個線程,和我們看到的raft-server-raft-atomix-partition 任務一致
比如下邊的為4個分區的,從界面看到大概有兩類,后邊再看看atomix 的原理(zeebe 狀態維護的底層依賴)

 

 

目前的幾個結論

  • zeebe 目前版本還不太穩定
    但是0.21.1 版本比以前的版本穩定
  • zeebe 分區個數會嚴重影響系統性能
    cpu 核數,磁盤io,以及集群規模都會都系統的響應有很大的影響,推薦部署使用ssd
  • exporter 對於系統有影響,但是並不大
    在測試的過程中,為了簡單exporter 的影響,刪除了對於es exporter的配置,對於系統響應並不提大(通過prometheus metrics 查看)
  • 后邊還是研究下atomix 的實現原理以及優化(zeebe 強依賴)

參考資料

一個簡單的基於docker-compose 的基礎環境https://github.com/rongfengliang/zeebe-debughttp-exporter-demo 實際運行結合場景
修改下配置
https://docs.zeebe.io/basics/partitions.html
https://github.com/jvm-profiling-tools/async-profiler
https://github.com/brendangregg/FlameGraph
https://github.com/atomix/atomix
https://github.com/Netflix/flamescope


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM