Ubuntu 22.04.2 LTS下无法修改kernel.perf_event_paranoid参数的求助
你遇到的这个问题在Ubuntu 22.04 LTS上并不少见,我来给你分享几种可行的解决办法:
先把你遇到的报错信息整理出来,方便后续排查参考:
Access to performance monitoring and observability operations is limited.
Consider adjusting /proc/sys/kernel/perf_event_paranoid setting to open
access to performance monitoring and observability operations for processes
without CAP_PERFMON, CAP_SYS_PTRACE or CAP_SYS_ADMIN Linux capability.perf_event_paranoid setting is 4:
-1: Allow use of (almost) all events by all users
Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK= 0: Disallow raw and ftrace function tracepoint access
= 1: Disallow CPU event access
= 2: Disallow kernel profilingTo make the adjusted perf_event_paranoid setting permanent preserve it
in /etc/sysctl.conf (e.g. kernel.perf_event_paranoid =)
方法一:用sysctl命令临时调整参数
如果直接编辑/proc/sys/kernel/perf_event_paranoid失败,试试用系统自带的sysctl工具修改,执行:
sudo sysctl -w kernel.perf_event_paranoid=1
这里的1可以根据你的需求替换成其他值(比如-1是最宽松的权限,2是禁止内核 profiling)。这个修改会立即生效,但重启系统后会恢复默认值。
方法二:通过sysctl.d目录永久修改参数
如果/etc/sysctl.conf无法编辑,推荐用/etc/sysctl.d/目录添加自定义配置,这个目录的优先级比sysctl.conf更高:
- 创建新的配置文件:
sudo nano /etc/sysctl.d/99-perf-tweaks.conf
- 在文件中写入:
kernel.perf_event_paranoid = 1
- 保存退出后,执行以下命令让配置立即生效:
sudo sysctl --system
这个修改是永久的,重启系统也会保留。
方法三:给perf工具添加特权能力
不想修改系统参数的话,可以直接给perf二进制文件添加必要的权限,这样普通用户就能正常使用:
sudo setcap cap_perfmon,cap_sys_ptrace+ep /usr/bin/perf
添加完成后,你不用sudo就能直接运行perf命令,无需调整perf_event_paranoid。
方法四:直接用sudo运行perf
如果以上方法都走不通,最简单的临时方案就是用root权限运行perf,root用户不受perf_event_paranoid的限制:
sudo perf stat -e cycles ./your_target_program
方法五:检查安全模块限制
如果还是无法修改参数,可能是Ubuntu自带的AppArmor安全模块阻止了操作:
- 先查看AppArmor的状态:
sudo aa-status
- 可以临时关闭AppArmor测试是否能修改参数:
sudo systemctl stop apparmor
如果关闭后能正常修改,就需要调整AppArmor的规则来允许修改这个sysctl参数(注意:不要长期关闭AppArmor,会降低系统安全性)。
备注:内容来源于stack exchange,提问作者Simplicissimus

