cpu使用率高(安卓查看每个app占用cpu)


服务器cpu占用率高的位置分析

通过性能监控,发现在线服务器CPU某个核心的占用率已经达到100%,是我们某个核心服务造成的。幸运的是,因为我们的服务过程是由多个相同的工作(线程)调度来承担的,所以除了高CPU占用率之外,它对服务没有任何影响。随着上一次我们找到了吃IO的罪犯,这次我们要追捕潜伏在群里的间谍,这就更惊心动魄了!

系统环境

系统环境

使用top命令可以轻松找到CPU使用率最高的用户。

top命令定位最高的CPU进程

以我们的业务流程(imDevServer)为例,为什么这个产品是《渗透者》?因为这是一个多线程的进程,我们需要知道实际占用cpu的最小单位是线程,所以一定是一个或者几个线程占用CPU过多造成的。使用top -H -p pid命令检查进程中每个线程占用的CPU百分比。

top -H -p pid命令,检查进程中线程占用的cpu百分比

如上图所示,我们可以看到id为8863的线程CPU利用率最高。好了,现在我们只需要找到他偷的中央处理器。虽然这小子嘴硬,但是我们有完善的审讯流程,不怕他不说话。第一个是strace -T -r -c -p pid命令

strace -T -r -c -p pid命令

,用来检查系统调用和花费的时间。epoll_wait是一个正常的阻塞呼叫,尽管它会占用大量的呼叫时间。然后我们让pstack pid退出

pstack pid退出

。我们可以看到每个线程的调用栈,找到已经被发现占用最高cpu的线程,然后看他的调用栈。很容易看出哪一步逻辑上导致了忙循环。然后用trace -p tid查看线程的调用过程,然后定位代码,修复bug,找回被盗的CPU。

来源网络,删除侵权联系人