利用CoreDump文件分析哪个函数占用CPU多。听起来有些离奇,CoreDump是系统出现问题时自动产生的CoreDump文件,可以分析出现问题时候的函数调用栈,怎么就可以分析哪个函数占用CPU多呢?
思路:人为产生CoreDump文件(例如:kill -3那个占用CPU最多的Java线程),分析那个时刻,线程执行到了哪个函数。然后,隔一段时间产生一次CoreDump文件(因为CoreDump文件很大,产生CoreDump文件需要消耗时间、CPU、IO资源,因此需要隔一段时间),产生N个CoreDump后,分析他们都停到了哪个函数。如果10个CoreDump里,有4-5个都停到了同一个函数,从统计的角度可以说明,至少40-50%的CPU时间片是被这个函数占用的。
对于java程序,nmon中可以看到的函数级最低就是java,占用CPU最多的就是java进程。至于java里面什么函数占用CPU多并不清楚,此时CoreDump文件就要大展身手了。
对于C程序,也可以产生CoreDump,并采用dbx分析,但需要用源程序的配合。
可参考我的文章