鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

容器中进程分析失败

现象描述

对容器中Java进程进行热点分析,采集结果无数据,提示信息如图2,后台Java应用进程打印报错“[ERROR] No access to perf events. Try --fdtransfer or --all-user option or 'sysctl kernel.perf_event_paranoid=1'”,使用sysctl kernel.perf_event_paranoid=1命令后仍无法正常采集火焰图。

图1 Docker报错信息
图2 热点分析失败时的报错信息

可能原因

创建并运行容器时,未赋予容器高权限,导致容器内执行perf命令失效。

处理步骤

  • Docker容器

    在启动Docker容器时,增加权限--privileged=true(赋予容器几乎所有权限)或--cap-add SYS_ADMIN(赋予容器执行系统级操作的权限),可以参考下述命令启动并运行Docker容器。

    1
    docker run -it --name=dockername --privileged=true [IMAGE] /sbin/init
    

    或:

    1
    docker run -it --name=dockername --cap-add SYS_ADMIN [IMAGE] /sbin/init
    
  • Containerd容器

    在启动Containerd容器时,增加权限--privileged=true(赋予容器几乎所有权限)或--cap-add CAP_SYS_ADMIN(赋予容器执行系统级操作权限),可以参考下述命令启动并运行Containerd容器。

    1
    ctr -n [NAMESPACE] run -d --privileged=true [IMAGE] [CONTAINER_NAME]
    

    或:

    1
    ctr -n [NAMESPACE] run -d --cap-add CAP_SYS_ADMIN [IMAGE] [CONTAINER_NAME]
    

在Docker容器或Containerd容器由Kubernates集群管理时,若通过“kubectl apply -f [FILENAME]”命令创建并运行容器,可在yaml配置文件增加权限privileged=true(赋予容器几乎所有权限)或add SYS_ADMIN(赋予容器执行系统级操作权限)。

图3 yaml配置文件