Docker/k8s 使用 Arthas 生成火焰图报错的解决办法
Arthas生成火焰图命令
profiler start
报错信息
Perf events unavailable. See stderr of the target process.
原因
官方列出了以下原因:
- /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。)
解决方案
Docker
修改docker-compose.yml,增加
cap_add:
- SYS_ADMIN
例如:
version: '1'
services:
xxx:
container_name: xxx
hostname: xxx
image: xxx
...
# 使得arthas中可以打印火焰图
cap_add:
- SYS_ADMIN
k8s
修改svc配置文件,增加
securityContext:
capabilities:
add:
- SYS_ADMIN
例如:
metadata:
labels:
service: hello-world
spec:
containers:
- image: "alpine:3.4"
command: ["/bin/echo", "hello", "world"]
# 使得arthas中可以打印火焰图
securityContext:
capabilities:
add:
- SYS_ADMIN