通过CPU分析工具,可以看到应用执行的调用栈,当前执行到什么函数,或者历史某个时间段,哪些函数占CPU高。
性能指标之资源指标-CPU-谁占用了CPU-函数级-tProf
首先看是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,还是文件读写
性能指标之资源指标-CPU-谁占用了CPU-函数级-curt
Summary看排在前面的进程,这些进程中找前几个动作查看,并且可以查看到内核态的报错信息
性能指标之资源指标-CPU-谁占用了CPU-函数级-truss
truss命令显示了应用程序对外部库和内核的调用情况。应用程序一般使用这些调用来访问网络、文件系统以及显示信息。通过观察这些调用及其结果,可以了解应用程序需要什么,并由此找到解决方案。
性能指标之资源指标-CPU-谁占用了CPU-函数级-CoreDump
Coredump分析当前执行到哪里了
收起