跑应用的时候 和不跑应用的时候,对比一下,资源差异大,就是应用导致的。
但应用导致的CPU资源占用,不一定显示为用户态。比如应用不当的调用系统函数,或者不知情的情况下,大量调用系统函数,会导致内核态CPU特别高。
通过CPU分析工具,可以看到应用执行的调用栈,当前执行到什么函数,或者历史某个时间段,哪些函数占CPU高。
举个常用工具的例子
性能指标之资源指标-CPU-谁占用了CPU-函数级-tProf
首先看是Kernel、User、SharedLibrary中的那个方面占比消耗高。例如,如果是sharelib占比比较高,则找到对应的sharelib分页,查看具体哪个lib占用CPU高,再查看这个特定的lib中哪个函数占用CPU高。
如果通过以上方法不能定位到一个应用层的函数,而是定位到消耗CPU最高的是个系统函数。不但不认识这个系统函数,也看不出谁调用了这个系统函数,因为一些系统层的函数是通用函数(比如h_cede_end_point),从这类函数并不能看出是谁在调用。这种情况,可以通过这个系统函数相邻的那些能看懂的函数来猜测,因为占用CPU高的函数往往是同一个应用、同一个模块、同一类系统调用导致,他们具有扎堆出现的特点。
如果定位到一个进程有问题,可以用Truss–c –p pid查看一个进程在干什么,比如,是在做fork,还是文件读写
性能指标之资源指标-CPU-谁占用了CPU-函数级-truss
有兴趣可以看我的aixchina专栏“系统性能测试”、微信公众号“性能测试与调优”中,也有不少这方面的文章。
收起