一个线程相关的高CPU占用问题的定位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个线程相关的高CPU占用问题的定位相关的知识,希望对你有一定的参考价值。

最近在重构项目代码时,发现两个线程同时访问一个加锁的std::list队列时,会出现恶性竞争锁的现象。

具体现象是A线程总是拿不到锁,B线程抢占几次后,A才抢占到。

由于是重构项目,也无法通过回滚代码来解决。

最终定位问题是,重构时对std::list队列单独封装了一个类导致的。单独封装一个类,那么每次push pop时都会多了一层函数堆栈。

删除该封装后,问题解决。

由此得出一个结论,对于频繁唤醒的读写线程,执行的操作应该尽量简单直接,避免冗余,避免进行过度的封装

以上是关于一个线程相关的高CPU占用问题的定位的主要内容,如果未能解决你的问题,请参考以下文章

Linux 线程占用CPU过高定位分析

JVM调优之jstack找出最耗cpu的线程并定位代码

java 多线程相关

Java内存泄漏分析系列之一:使用jstack定位线程堆栈信息

top命令定位CPU高占用代码

linux怎么查看线程cpu