13-Linux性能优化答疑
[08-案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)]
为啥不一上来就用perf工具解决,还要执行那么多其他工具呢?
在问题7的perf report界面中,swapper高达99%的比例
直觉来说,应该直接观察它才对,为什么没那么做呢?
:
swapper跟SWAP没有任何关系,它只在系统初始化时创建init进程
之后,它就成了一个最低优先级的空闲任务
也就是说,当CPU没有其他任务运行时,就会执行swapper
所以,可以称它为“空闲任务”
在perf report的界面中,展开它的调用栈,会看到,swapper时钟事件都耗费在了do_idle 上,也就是在执行空闲任务
所以,分析案例时,直接忽略了前面这个99%的符号,转而分析后面只有0.3%的app
其实从这里也能理解,为什么一开始不先用perf分析
因为在多任务系统中,次数多的事件,不一定就是性能瓶颈
所以,只观察到一个大数值,并不能说明什么问题
具体有没有瓶颈,还需要你观测多个方面的多个指标,来交叉验证
关于Children和Self的含义
Self是最后一列的符号(可以理解为函数)本身所占比例
Children是这个符号调用的其他符号(可以理解为子函数,包括直接和间接调用)占用的比例之和
很多性能工具确实会对系统性能有一定影响
就拿perf来说,它需要在内核中跟踪内核栈的各种事件,那么不可避免就会带来一定的性能损失
这一点,虽然对大部分应用来说,没有太大影响,但对特定的某些应用(比如那些对时钟周期特别敏感的应用)
可能就是灾难了
使用性能工具时,确实应该考虑工具本身对系统性能的影响
perf 这种动态追踪工具,会给系统带来一定的性能损失
vmstat、pidstat这些直接读取proc文件系统来获取指标的工具,不会带来性能损失