CentOS多核环境下运行perf报页面映射权限错误的排查求助
解决CentOS 8下perf record内存锁定权限错误
问题分析
报错提示的内存映射权限问题,本质是perf需要锁定内存存储采样数据,但当前系统的内存锁定限制(perf_event_mlock_kb)或用户资源配额不足以支撑采样需求——尤其是开启--call-graph dwarf时,栈信息采样会额外增加内存消耗。
解决方案
1. 临时提升内核内存锁定限制
执行以下命令临时调整perf_event_mlock_kb,数值可根据系统内存调整(建议设为4096或物理内存的1/4以内):
echo 4096 | sudo tee /proc/sys/kernel/perf_event_mlock_kb
2. 永久配置内核内存锁定限制
为避免重启后失效,将配置写入sysctl专用文件:
echo "kernel.perf_event_mlock_kb = 4096" | sudo tee /etc/sysctl.d/99-perf.conf sudo sysctl -p /etc/sysctl.d/99-perf.conf
3. 合理设置perf的-m参数
不要使用默认的超大值(4294967295),手动指定匹配mlock限制的页数值,比如1024页(对应4MB内存),修改后的命令:
perf record -F 99 -p <pid> -g -o perf.data --call-graph dwarf -m 1024 -- sleep 120
4. 调整用户内存锁定资源配额
先检查当前用户的内存锁定限制:
ulimit -l
如果输出为0或过小,临时调整:
ulimit -l 4096
永久调整需编辑/etc/security/limits.conf,添加(替换<你的用户名>):
<你的用户名> soft memlock 4096 <你的用户名> hard memlock 4096
保存后重新登录用户生效。
已知问题说明
在CentOS 8的4.18.0-193.6.3.el8_2.v1.2.x86_64内核版本中,--call-graph dwarf与多核环境结合时,会显著增加perf的内存需求,容易触发内存锁定限制。同时,默认的-m参数值过大,会导致内核拒绝分配内存页,必须手动指定合理值配合mlock限制调整才能解决。
内容的提问来源于stack exchange,提问作者Chen Ge
相关产品推荐
相关产品推荐

