多个线程的程序CPU跑满的原因排查

版权声明: https://blog.csdn.net/liwan2018/article/details/79361878

多个线程的程序CPU跑满查原因

今天突然在讨论区看到这个帖子,想到了一个月前我在某东金融研发面试时被问到了同样的问题,我的回答是top一下,看服务器进程,然后就没有然后。。。面试官gg就把我挂了。。。现在总结一下:

  1. 只要是跑着的线程,那么都是占用CPU的线程,如果一个进程有多个线程在同时运行,那么cpu占满是不可能的,每个线程本来就是会被操作系统分配时间片的。举个栗子:如果3个线程同时运行,那么只有问题线程所使用的30%是满的,3个线程同时都是问题线程的概率是很小的(但不是没有可能),所以cpu总体使用率可能是50%以上,但不可能达到100%。
  2. 遇到问题进程,这个首先得看是不是程序占得cpu,这个还是可以top一下,查看性能监测器,确定是某个程序的话,可以通过windbg抓dump进行分析(至于怎么分析反正我不会,这东西都是破指令,只能遇到之时现学现用,学过一次,用完之后不用很快就忘了……)
  3. 可能面试官想听的是自己做一套线程监控,把内部线程和系统线程id结合,但是实际操作中这个东西反而在很多时候会空耗资源和运行时间。 (不定他只是想让你在调试状态下查看CPU使用率,然后找到哪个函数CPU占用过高呢。。。但是只要答到面试官想要点子上,面试就不会挂了。。。呵呵)
  4. 最后一点,也是最关键的一点:从处理的业务入手,启动线程时,加入处理标志,然后结合日志。从细微做起,养成良好的添加日志的习惯,为以后的问题定位排查堵坑。

ps:本文综合讨论区和自己的观点,仅代表自己的看法,如有错误,欢迎批评指正!


多少人忙得连写博客的时间都没有哟!

猜你喜欢

转载自blog.csdn.net/liwan2018/article/details/79361878