首先看是Kernel、User、Shared Library中的那个方面占比消耗高。例如,如果是share lib占比比较高,则找到对应的share lib分页,查看具体哪个lib占用CPU高,再查看这个特定的lib中哪个函数占用CPU高。
如果通过以上方法不能定位到一个应用层的函数,而是定位到消耗CPU最高的是个系统函数。不但不认识这个系统函数,也看不出谁调用了这个系统函数,因为一些系统层的函数是通用函数(比如h_cede_end_point),从这类函数并不能看出是谁在调用。这种情况,可以通过这个系统函数相邻的那些能看懂的函数来猜测,因为占用CPU高的函数往往是同一个应用、同一个模块、同一类系统调用导致,他们具有扎堆出现的特点。
如果是kernal->lock占 2~3% cpu就是很多了。
如果定位到一个进程有问题,可以用Truss –c –p pid查看一个进程在干什么,比如,是在做fork,还是文件读写。
我的这篇文章中,分享了两个具体案例的分析过程