Docker中使用火焰图FlameGraph分析JVM应用性能
前言
前面的文章,我们讲述了如何通过perf的方式对java程序进行性能剖析,并生成FlameGraph火焰图,但是实际生产中,很多企业会将java部署在docker容器当中,这时对docker内运行的java进程进行剖析便成为一件很麻烦的事情。
执行步骤
安装相关依赖
yum install -y git cmake gcc-c++ gcc perf
下载项目
git clone https://github.com/zrbcool/docker-flame-graphs.git
指定JAVA_HOME环境变量
export JAVA_HOME=/root/jdk1.8.0_181 export PATH=$JAVA_HOME/bin:$PATH
编译项目
cd docker-flame-graphs/ cmake . && make
找到你要分析的docker进程
docker ps | grep xxx
找到这个容器的进程Pid
docker inspect --format '{{.State.Pid}}' [CONTAINER_ID]
修改脚本当中的JAVA_HOME保证与容器内部的JAVA_HOME一致
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]
docker-perf-top效果
docker-perf-java-flames
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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云云渲染管理系统怎么使用?
云渲染管理系统(Render Manager)是一个开源的 web 应用,可以帮助用户轻松搭建阿里云上的私有渲染系统,直接调用海量计算资源,一键管控集群规模,在加速渲染任务的同时省去自建集群的烦恼。 今天,我们主要给大家介绍一下如何使用云渲染管理系统。 首先,请开通ECS,OSS,BatchCompute。进入个人中心,生成AccessKey信息,这里只是演示,正式生成请使用限权子账号。 准备测试文件并上传至OSS 准备好测试用场景文件:http://openrm.oss-cn-qingdao.com/blender/monkey/cube.hlend,可以自行准备。 在oss控制台创建测试用Bucket,区域选择青岛,权限为私有。 将前面下载的测试场景上传到新建的Bucket,目录结构为blender/monkey/cube.blend, 先新建目录结构文件夹然后上传文件。 安装并购买ECS实例 在云市场搜索rendermanager,并以此镜像启动ECS实例(按量),请给云主机设置强密码! 云主机开通后,进入ECS控制台,刷新并耐心等待实例启动。 待实例状态变为运行中后,复制实例的...
- 下一篇
利用函数计算流式 gz 打包 ECS 上的单个 超大文件
背景 在某些业务场景下,生成超大的日志文件或者其他文件, 这些文件需要及时移出并 gz 压缩保存到 OSS,但是压缩文件可能会大于 3G 超出函数计算执行环境的最大内存限制, 本文提供流式解决这个问题的方案 函数计算配置VPC, 内网打通ecs OSS 和 函数计算在相同 region, 内网传输 示例代码 依赖使用第三方库 paramiko, 但是默认的库在传输大文件上有传输速率限制, 需要做如下改造, 同时构造 paramiko.SFTPClient 的时候需要设置好 window_size 和 max_packet_size 这两个参数 import paramiko import gzip import oss2 import logging import os import time logging.getLogger("oss2
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果