千家信息网

如何实现容器中生成火焰图

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,这篇文章主要介绍"如何实现容器中生成火焰图",在日常操作中,相信很多人在如何实现容器中生成火焰图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何实现容器中生成火焰图"
千家信息网最后更新 2024年09月23日如何实现容器中生成火焰图

这篇文章主要介绍"如何实现容器中生成火焰图",在日常操作中,相信很多人在如何实现容器中生成火焰图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何实现容器中生成火焰图"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,深受开发者喜爱。

  • 当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

  • 是否有一个全局视角来查看系统的运行状况?

  • 有什么办法可以监控到JVM的实时运行状态?

一、背景

arthas的github仓库中曾经有人提过这样一个issue。错误信息如下:

Perf events unavailable. See stderr of the target process.

为什么我要写这篇博客,笔者在arthas官方仓库中发现官方的回复里只是给了一个指向async-profiler官方的地址, 很多人可能顺着给出的地址去async-profiler官方文档看了也是非常的懵。并且async-profiler描述也不一定找到好的解决方案。 因此,写这边博客的目的是帮助大家后续在遇到这个问题时能够有一个其它的方案去解决问题。 下面笔者将带着大家一步一步的解决,arthas在容器中生成火焰图报错的问题。

二、 alpine容器镜像中生成火焰图

如何在自己的镜像中添加arthas,请直接看官方网站,如果不了解的怎么使用arthas的同学也请先去官网看资料。

生成火焰图:

[arthas@1]$ profiler startAsyncProfiler error: /opt/arthas/async-profiler/libasyncProfiler-linux-x64.so: libstdc++.so.6: cannot open shared object file or directory

执行命令后发现alpine基础镜像中缺乏libstdc++.so.6库,遇事不要慌,现在安装下libstdc++。

[root@node-znjj-131-146 testYaml]# kubectl exec -it springboot-tomcat-deployment-7577ccdd9d-4rpc4 /bin/bashbash-4.4# apk add libstdc++fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gzfetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz(1/1) Installing libstdc++ (8.3.0-r0)Executing glibc-bin-2.29-r0.triggerOK: 32 MiB in 39 packages

安装完成后在执行arthas的生成火焰图命令。

[arthas@1]$ profiler startPerf events unavailable. See stderr of the target process.

不好了,又出现了新的问题了。这个问题通常是出现在容器环境中。 arthus实际是利用async-profiler去完成的。在async-profiler官方地址的README中有提到改问题。

Perf events unavailble. See stderr of the target process.

perf_event_open() syscall has failed. The error message is printed to the error stream of the target JVM.

Typical reasons include:

  • /proc/sys/kernel/perf_event_paranoid is set to restricted mode (>=2). /proc/sys/kernel/perf_event_paranoid 设置为受限模式(> = 2)

  • seccomp disables perf_event_open API in a container(seccomp禁用容器中的perf_event_open API。).

  • OS runs under a hypervisor that does not virtualize performance counters.(操作系统在不虚拟化性能计数器的管理程序下运行。)

  • perf_event_open API is not supported on this system, e.g. WSL.(该系统不支持perf_event_open API,例如WSL。)

我们这里来好看下系统的/proc/sys/kernel/perf_event_paranoid 这个配置项。

bash-4.4# cat /proc/sys/kernel/perf_event_paranoid2

发现该系统配置参数的值确实是大于等于2。 根据官方文档的描述。尝试将/proc/sys/kernel/perf_event_paranoid的值设置为1。

bash-4.4# echo 1 > /proc/sys/kernel/perf_event_paranoidbash-4.4# bash: /proc/sys/kernel/perf_event_paranoid: Read-only file system

说明权限不足。这时问题又来,通常情况下基础镜像的都是使用的非root权限。如果我们硬要修改这个配置项,第一想到的可能只能重新构建镜像了。在构建镜像的时候修改基础镜像的用户,然后设置系统参数。

这带来了新的问题:

  • 新的基础镜像变更后带来了安全问题。

  • 所有需要的尝试生成火焰图的更改基础镜像。

这是稍微思考下,我们发现kubernetes下或者docker中都允许我们变更容器的权限。

在docker中可以使用--cap-add SYS_ADMIN命令选项来指定。

docker run  --cap-add=SYS_ADMIN {container}

在kubernetes中可以通过securityContext来设置。修改你的deployment部署文件,配置参考如下。

containers:    - name: springboot-tomcat      image: registry.cn-shanghai.aliyuncs.com/shalousun/springboot:2.3.4-tomcat      imagePullPolicy: Always      securityContext:        capabilities:          add: ["SYS_ADMIN"]

配置好后重新在kubernetes中部署就好了。部署好重新进入容器后就可以正常按照arthas官方的命令执行了。

[arthas@1]$ profiler startStarted [cpu] profiling[arthas@1]$ profiler getSamples3[arthas@1]$ profiler status[perf] profiling is running for 28 seconds[arthas@1]$ profiler stopOKprofiler output file: /arthas-output/20201109-181906.svg

到此,关于"如何实现容器中生成火焰图"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

问题 容器 火焰 镜像 官方 中生 系统 基础 配置 命令 学习 帮助 地址 权限 生成 运行 仓库 博客 参数 文档 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 全球网络安全行业专利申请数量 泰安直播软件开发企业 数据库 时间戳用int存 sql找不到本地服务器 网络安全和日常的关系会议报道 丰台区正规软件开发资费 深圳市汇纤网络技术有限公司 婺城区软件开发制度 电影信息管理系统数据库课设 数据库改数据透视表为什么不变动 华为 服务器业务 售价 中国网络安全技术能不能 国内服务器搭建网站需要备案吗 fddi网络技术 昆明软件开发工程师正规培训 传奇4国际服服务器在哪个国家 政务软件开发哪些公司可以做 北京定制公交盈利数据库表 跨平台pc软件开发 2u服务器能耗多少 云健康软件开发方案 vba 内置数据库 成都 软件开发 优惠政策 网络技术行业的应用 erp软件开发实例 清华同方中文系列数据库 网络安全健康心得体会2000字 手抄报网络安全主题高难度 软件开发用户界面设计模板 苏州蜂拥云网络技术公司
0