返回

CentOS 系统 `perf` 权限映射错误:终极指南

Linux

CentOS 系统上 perf 权限映射错误的终极指南

问题

在多核心的 CentOS 系统上运行 perf record 命令时,你可能遭遇这样的错误:

Permission error mapping pages.
Consider increasing /proc/sys/kernel/perf_event_mlock_kb,
or try again with a smaller value of -m/--mmap_pages.
(current value: 4294967295,0)

此错误表明 perf 无法将内核事件缓冲区映射到用户空间,这通常是因为以下原因之一:

  • /proc/sys/kernel/perf_event_mlock_kb 的值太小。
  • -m/--mmap_pages 的值太大。

解决方法

1. 增加 /proc/sys/kernel/perf_event_mlock_kb 的值

echo 1024 | sudo tee /proc/sys/kernel/perf_event_mlock_kb

2. 减小 -m/--mmap_pages 的值

perf record -F 99 -p <pid> -g -o perf.data --call-graph dwarf -- sleep 120

其他建议

  • 确保你有足够的内核空间。
  • 检查你的内核是否已禁用 perf 事件。
  • 尝试使用不同的 perf 事件。
  • 升级到更新的内核版本。

已知问题

在某些版本的 CentOS 上,可能会出现 perf 事件映射权限问题的已知问题。这通常可以通过增加 /proc/sys/kernel/perf_event_mlock_kb 的值来解决。

常见问题解答

1. 为什么会出现此错误?

此错误通常是由 /proc/sys/kernel/perf_event_mlock_kb 的值太小或 -m/--mmap_pages 的值太大引起的。

2. 如何检查 /proc/sys/kernel/perf_event_mlock_kb 的值?

cat /proc/sys/kernel/perf_event_mlock_kb

3. 如何更改 /proc/sys/kernel/perf_event_mlock_kb 的值?

echo 1024 | sudo tee /proc/sys/kernel/perf_event_mlock_kb

4. 如何减小 -m/--mmap_pages 的值?

perf record -F 99 -p <pid> -g -o perf.data --call-graph dwarf -- sleep 120

5. 如果这些步骤不起作用,我该怎么办?

尝试以下操作:

  • 确保你有足够的内核空间。
  • 检查你的内核是否已禁用 perf 事件。
  • 尝试使用不同的 perf 事件。
  • 升级到更新的内核版本。