linux cpu使用率太高,小技巧:教您一个窍门!解决Linux下CPU使用率过高的问题

1460000037551142

大家好!我是肖恩!

我相信许多C ++程序员都遇到了程序占用大量CPU的问题。如果您熟悉代码运行逻辑并且仅依靠大脑来估计位置,则这种问题并不困难,但是如果您调用了第三方SDK,或者由其他人开发的库导致的CPU使用率过高,团队很难找到。

今天,分享我的工作方式!

如何确定程序的CPU使用率?

这非常简单,只需执行一个命令,top -p process pid,因此您可以:

1460000037551143

通过这种方式,您可以继续观察程序的CPU使用情况。如果仍然很高,可能有问题。从图中可以看出,%CPU为98.0,已经很高了。

如何在线程级别检查CPU使用率?方法1:

命令:

ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu | grep 进程号

1460000037551144

这是比较长的,不难记住。在这里,我们可以看到用户,进程号,父进程号,线程号,cpu总占用时间,cpu占用率和程序名称。根据cpu值升序排列,最后一个是cpu最高的线程,这样就可以找到对应的线程号。

图中的第四列是线程号,第五列是cpu占用时间,第六列是cpu占用率。您可以看到54313线程占用的CPU最高。

方法2:

命令:

top -H -p 进程号

-H :Threads-mode operation

-p :Monitor-PIDs

3874644bcff0f4fc5ef1330f9bf1e556.png

1460000037551146

这很容易记住,我推荐这个!一目了然,每个线程的CPU使用率都会动态显示,很容易找到最高的线程。

在图中的%CPU列清楚地列出了CPU占用状态。还可以看到54313线程占用的CPU最高。

专心的学生发现,为什么两种方法获得的数据不同?可能是错的吗?实际上,它们都是正确的,但是用于计算的数据是不同的。 Top获取瞬时cpu占用率。默认情况下,顶部数据每3秒刷新一次,因此计算是这3秒中线程占用的CPU时间的比例,而ps则计算这是从启动到现在的时间百分比。运行时间越长,它将越接近某个固定值。有兴趣的学生可以了解CPU占用的算法。

如何在代码行级别找到问题?

708c6123fca6914cc0f4e6e05cdb23d3.png

通过上述操作,我们找到了正在运行的线程,但是该线程看起来像是鬼。我们只能看到代表它的数字。这时,我们需要程号和特定代码之间建立映射。关联,那么您需要使用这些功能强大的工具来查看堆栈信息。

gstack / pstack(c / c ++程序)

命令:

gstack/pstack 进程号

这两个实际上是一个工具,而pstack只是gstack的软链接。

fbd1b170711eaf8f932374e0f22434c1.png

1460000037551145

jstack(Java程序)

命令:

jstack 进程号

如果线程很多,请重定向到文本文件,gstack进程ID> gstack.txt,以便于查看。该文本文件存储线程号和调用堆栈之间的映射,以便我们可以轻松找到出现问题的特定代码。建议抓几次。如果每次调用堆栈都相同,则基本上可以,请确保这是这段代码的问题。

1460000037551147

进行此类操作后,可以快速找到CPU使用率高的问题!

今天在这里分享!谢谢大家!如果您觉得它有用,请给我个赞〜

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/shoujiruanjian/article-340467-1.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值