首页 > 编程知识 正文

linux查看每个cpu占用,linux查看cpu使用情况命令

时间:2023-05-05 21:52:02 阅读:13031 作者:1471

如何使用工具显示CPU使用率. pdf

查看cpu利用率工具总结

概要

遇到软件性能问题时,需要确认系统的CPU、内存、磁盘等方面的情况。 确认CPU的使用状况是最优先的事项。 看CPU,主要阐明以下几个问题。

1. CPU使用率是否高

2 .哪个进程和哪个线程正在使用CPU

3 .占用CPU的任务是在用户状态还是内核状态下消耗时间。

4 .系统负载时,系统CPU是否稍微过载?

5 .如何查看消耗CPU的任务中哪个路径的代码正在消耗CPU

上面的五个步骤是自然的、循序渐进的,取决于正反两方面的想法。 基本上通过明确上述五个方面,可以明确CPU使用率高的具体理由。 可以对优化器起到指导作用。

查看CPU利用率

关于性能问题,首先是检查CPU的利用率。 检查CPU利用率的方法是一个众所周知的top命令,但要知道top显示了多核系统中所有CPU的平均利用率。 例如,在四核系统中,如果一个CPU的利用率为100%,而另一个CPU空闲,则top命令显示的利用率可能仅为25%。

另一个top命令是top -H -p pid,它允许您检查一个进程中所有线程的CPU利用率

顶级PID

上面的命令是确定进程中的哪个线程占用了更多的CPU

top - 15:31:32 up 69 days、6:09、35users、loadaverage:1.78、3.36、3.86

tasks : 3总,0运行,3 sleeping,0 stopped,0 zombie

CPU(s ) : 0.0% us、0.0% sy、0.0% ni、99.9% id、0.0% wa、0.0% hi、0.0% si

Mem: 264037488k total,261933344k used,2104144k free,4541060k buffers

Swap: 33554428k total,1116764k used,32437664k free,212254216k cached

piduserprnivirtresshrs % CPU % memtimecommand

134 root 200229620720 s0.0. 00:00.09 ypbind

139 root 200229620720 s0.0. 00:00.00 ypbind

140 root 200229620720 s0.0. 00:18.59 ypbind

如何确定进程消耗的是CPU时间是用户状态还是内核状态

程序消耗CPU基本上有两种情况

1 .程序进行大量的计算操作,例如加密操作等,此时,程序在用户状态下消耗大量的CPU

2 .程序提出了很多IO要求。 例如,在网络上发送接收消息,或者读写磁盘。 此时,在核心状态下消耗大量的CPU。

要确定进程使用的是用户状态还是内核状态,可以使用以下命令

vmstat 1

mpstat -P ALL 1

sar -P ALL -u 1

$vmstat 1

procs-------- -内存------swap------ io------系统--------- -系统

rbswpdfreebuffcachesisobiboincsussyidwa

0 0 1117164 1847008 4544520 212508872 0 0 11 41 0 0 1 1 98 0

0 0 1117164 1846976 4544520 212508948 0 0 0 12 1864 3419 0 0 100 0

0 0 1117164 1847328 4544520 212508948 0 0 0 12 2210 3792 0 0 100 0

0 0 1117164 1847164 4544520 212508948 0 0 0 12 2293 3657 0 0 100 0

0 0 1117164 1846848 4544520 212508948 0 0 0 12 2946 4963 0 0 99 0

0 0 1117164 1846848 4544520 212508948 0 0 0 38020 1894 2941 0 0 100 0

0 0 1117164 1846972 4544528 212508948 0 0 0 48 401 1272 0 0 100 0

root @ localhost :~# mpstat-pall 1

Linux 3

.12.19-rt30 (localhost) 01/09/70 _ppc_ (2 CPU)

02:43:11 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

02:43:12 all 97.52 0.00 1.98 0.00 0.00 0.50 0.00 0.00 0.00 0.00

02:43:12 0 95.05 0.00 3.96 0.00 0.00 0.99 0.00 0.00 0.00 0.00

02:43:12 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:43:12 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

02:43:13 all 96.98 0.00 3.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:43:13 0 93.07 0.00 5.94 0.00 0.00 0.99 0.00 0.00 0.00 0.00

02:43:13 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:43:13 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

02:43:14 all 97.50 0.00 2.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:43:14 0 95.00 0.00 5.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:43:14 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

root@localhost:~# sar -P ALL -u 1

Linux 3.12.19-rt30 (localhost) 01/09/70 _ppc_ (2 CPU)

03:01:04 CPU %user %nice %system %iowait %steal %idle

03:01:05 all 97.00 0.00 3.00 0.00 0.00 0.00

03:01:05 0 96.00 0.00 4.00 0.00 0.00 0.00

03:01:05 1 98.00 0.00 2.00 0.00 0.00 0.00

03:01:05 CPU %user %nice %system %iowait %steal %idle

03:01:06 all 97.00 0.00 3.00 0.00 0.00 0.00

03:01:06 0 95.00 0.00 5.00 0.00 0.00 0.00

03:01:06 1 99.00 0.00 1.00 0.00 0.00 0.00

如何查看系统CPU的负载

从上面的命令和方法我们大致知道了哪些CPU上面,哪些进程和线程消耗了多少CPU,并且知道消耗CPU是在用户态还是在内核态。接下去我们还想知道这么多进程在忙碌的跑着,是不是真的达到了系统的满载程度呢?对的,查看一下系统的负载,我们有如下命令查看系统负载。

1. uptime

2. sar -P ALL -q 1

root@localhost:~# sar -P ALL -q 1

Linux 3.12.19-rt30 (localhost) 01/09/70 _ppc_ (2 CPU)

03:06:06 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked

03:06:07 12 174 15.86 16.09 15.86 0

03:06:08 11 174 15.86 16.09 15.86 0

03:06:09 13 174 15.79 16.07 15.86 0

03:06:10 13 174 15.79 16.07 15.86 0

从上面命令的结果来看

1. runq-sz 表示系统中可运行的程序线程数目

2. plist-sz 表示系统中总共的进程和线程数目

3. ldavg-1 表示一分钟内系统的负载大小,也可以理解位平均可运行状态的线程数目

如何查找消耗CPU的代码

OK,上面的方法使我们队消耗CPU的程序有了大概的认识,最有我们要在这个程序中找到真正导致CPU忙的“如意的方盒”,也就是我们希望找到有问题的代码具体位置,完成这个目标的方法有如下三个。

1. perf top -p pid

2. pstack pid

3. 上一篇文章中介绍的CPU call trace采样并且绘制出火焰图来,这个方法比较重量级,但是更加直观和可视化。

彩蛋

如何用一条命令占用CPU

while true; do a=1; done &

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。