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

发布时间:2023-04-05 16:00

背景:需要使用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环境下也很好设置。主要是后面的解决步骤,在此记录。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号