安装 perf
用户空间工具
{PackageManagerCommand} install perf
perf top
命令用于实时系统分析,其功能与 top
实用程序类似。但是,top
实用程序通常显示给定进程或线程使用的 CPU 时间,perf top
会显示每个特定函数使用的 CPU 时间。在默认状态下,perf top
将告知您用户空间和内核空间的所有 CPU 所使用的函数。要使用 perf top
,您需要 root 访问权限。
启动 perf top
:
perf top
监控数据如下:
- Samples: 55K of event 'cpu-clock', 4000 Hz, Event count (approx.): 10236634002 lost: 0/0 drop: 0/0
- Overhead Shared Object Symbol
- 10.94% [kernel] [k] __do_softirq
- 6.51% libpython2.7.so.1.0 [.] PyEval_EvalFrameEx
- 3.32% [kernel] [k] _raw_spin_unlock_irqrestore
- 3.03% [kernel] [k] copy_pte_range
- 2.95% [kernel] [k] run_timer_softirq
- 2.41% [kernel] [k] unmap_page_range
- 1.28% [kernel] [k] finish_task_switch
- 1.26% [kernel] [k] __do_page_fault
- 1.14% libpython2.7.so.1.0 [.] PyObject_Malloc
- 0.91% libc-2.17.so [.] _int_malloc
- 0.90% libc-2.17.so [.] __memcpy_ssse3_back
- 0.84% libpython2.7.so.1.0 [.] 0x00000000000806b6
- 0.78% [kernel] [k] rcu_process_callbacks
- 0.77% libpython2.7.so.1.0 [.] _PyType_Lookup
- 0.70% [kernel] [k] mem_cgroup_charge_common
- 0.66% libpython2.7.so.1.0 [.] PyDict_GetItem
- 0.61% libc-2.17.so [.] _int_free
- 0.58% [kernel] [k] page_remove_rmap
- 0.57% libpython2.7.so.1.0 [.] PyDict_Next
- 0.53% [kernel] [k] __d_lookup_rcu
- 0.51% [kernel] [k] system_call_after_swapgs
- 0.45% [kernel] [k] clear_page_c_e
- 0.43% [kernel] [k] get_page_from_freelist
- 0.42% libpython2.7.so.1.0 [.] PyTuple_New
- 0.40% libpython2.7.so.1.0 [.] 0x0000000000114855
- 0.38% libpython2.7.so.1.0 [.] _PyObject_GenericGetAttrWithDict
- 0.37% libc-2.17.so [.] __GI___libc_open
- 0.36% [kernel] [k] find_busiest_group
- 0.34% perf [.] __symbols__insert
- 0.33% [kernel] [k] copy_user_enhanced_fast_string
- 0.32% libpython2.7.so.1.0 [.] 0x0000000000114be4
- 0.31% [kernel] [k] file_free_rcu
- 0.31% [kernel] [k] _raw_qspin_lock
- 0.31% libpython2.7.so.1.0 [.] PyObject_Free
- 0.29% libpython2.7.so.1.0 [.] PyFrame_New
- 0.29% libc-2.17.so [.] malloc_consolidate
perf top
在几个列中显示数据含义:
"Overhead"列:显示给定函数正在使用的 CPU 百分比。
"共享对象"列:显示使用函数的程序或库的名称。
"Symbol"列:显示函数名称或符号。内核空间中执行的功能由 [k]
标识,用户空间中执行的功能则由 [.]
识别。
这个示例输出中可以看到__do_softirq这个符号使用CPU最高,功能是中断处理程序。