Pepper Metrics是我與同事開發的一個開源工具(github.com/zrbcool/pep…),其經過收集jedis/mybatis/httpservlet/dubbo/motan的運行性能統計,並暴露成prometheus等主流時序數據庫兼容數據,經過grafana展現趨勢。其插件化的架構也很是方便使用者擴展並集成其餘開源組件。
請你們給個star,同時歡迎你們成爲開發者提交PR一塊兒完善項目。html
前面的文章,咱們講述瞭如何經過perf的方式對java程序進行性能剖析,並生成FlameGraph火焰圖,可是實際生產中,不少企業會將java部署在docker容器當中,這時對docker內運行的java進程進行剖析便成爲一件很麻煩的事情。java
安裝相關依賴c++
yum install -y git cmake gcc-c++ gcc perf
複製代碼
下載項目git
git clone https://github.com/zrbcool/docker-flame-graphs.git
複製代碼
指定JAVA_HOME環境變量github
export JAVA_HOME=/root/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
複製代碼
編譯項目docker
cd docker-flame-graphs/
cmake . && make
複製代碼
找到你要分析的docker進程數據庫
docker ps | grep xxx
複製代碼
找到這個容器的進程Pidbash
docker inspect --format '{{.State.Pid}}' [CONTAINER_ID]
複製代碼
修改腳本當中的JAVA_HOME保證與容器內部的JAVA_HOME一致mybatis
vi bin/create-java-perf-map.sh
export JAVA_HOME=/app/3rd/jdk/default
複製代碼
去掉腳本當中被註釋的命令:架構
vi bin/docker-perf-top
#刪掉下面代碼前面的註釋
sudo perf top -p $host_pid
複製代碼
在docker-flame-graphs目錄下,執行:
docker cp $(pwd) [CONTAINER_ID]:/docker-flame-graphs
複製代碼
而後須要確認你的JVM參數增長了-XX:+PreserveFramePointer,若是沒有,須要增長並重啓服務
如今全部的準備工做已經完成,讓你的JVM進程運行一段時間完成JIT的預熱
而後咱們開始分析性能:
cd bin
./docker-perf-top [CONTAINER_ID] [JAVA_ID]
./docker-perf-java-flames [CONTAINER_ID] [JAVA_ID]
複製代碼
svg圖像能夠下鑽等操做,請打開連接查看點我
https://github.com/jvm-profiling-tools/perf-map-agent/issues/50
https://blog.alicegoldfuss.com/making-flamegraphs-with-containerized-java/
https://github.com/mboussaa/docker-flame-graphs
http://www.batey.info/docker-jvm-flamegraphs.html
https://github.com/chbatey/perf-map-agent
https://blog.alicegoldfuss.com/making-flamegraphs-with-containerized-java/
https://github.com/jvm-profiling-tools/perf-map-agent
https://medium.com/netflix-techblog/java-in-flames-e763b3d32166
複製代碼