关于arthas:基于alpine的docker镜像使用arthas火焰图遇到的问题解决

51次阅读

共计 656 个字符,预计需要花费 2 分钟才能阅读完成。

背景:须要应用 arthas 的火焰图查看程序的运行状况,arthas 其余性能可失常应用,然而输出 profiler start 后报错。

环境:程序是由 alpine 镜像构建的,基于 jdk8。docker 采纳 swarm 模式搭建的集群。

问题:

  1. libstdc++.so.6: cannot open shared object file
  2. No access to perf events. Try --fdtransfer or --all-user option or 'sysctl kernel.perf_event_paranoid=1'

解决:

  1. 构建镜像时 Dockerfile 中退出 RUN apk add libstdc++ 即可解决
  2. 分步解决
    2.1 docker 容器个别应用宿主机的 kernel 参数,将宿主机的perf_event_paranoid 设置为 1 后,在容器中查看对应参数曾经变为 1 了,但还是无奈启动。
    2.2 通过一系列搜寻看到在 docker run 时能够增加 --cap-add SYS_ADMIN,尝试后可失常应用。
    2.3 查看 docker 文档,批改部署 yaml 后,再次部署发现不反对cap_add 参数。应用雷同的配置用 docker-compose 就能够启动,并能够应用 profiler
    2.4 再次一系列查问,发现在 swarm 环境下cap-add 有 bug,在 20.10 版本之前去除了,将本机 docker 降级一下就能够失常应用。

总结:当初应该没有应用 docker swarm 的中央了,仅后面两步解决还是很简略的,在 k8s 环境下也很好设置。次要是前面的解决步骤,在此记录。

正文完
 0