背景:须要应用arthas的火焰图查看程序的运行状况,arthas其余性能可失常应用,然而输出profiler start
后报错。
环境:程序是由alpine镜像构建的,基于jdk8。docker采纳swarm模式搭建的集群。
问题:
libstdc++.so.6: cannot open shared object file
No access to perf events. Try --fdtransfer or --all-user option or 'sysctl kernel.perf_event_paranoid=1'
解决:
- 构建镜像时 Dockerfile中退出
RUN apk add libstdc++
即可解决 - 分步解决
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
环境下也很好设置。次要是前面的解决步骤,在此记录。