精华内容
下载资源
问答
  • 主要介绍了python统计cpu利用率的方法,涉及Python中win32pdh模块的使用技巧,需要的朋友可以参考下
  • 需要提高cpu利用率的shell脚本
  • 在Linux中如果要监视一个进程的运行情况,如查看它的CPU使用效率和内存使用情况,就需要从系统的/proc目录的读取一些系统信息。本文介绍了获得系统CPU和内存情况的代码。
  • 此资源文件主要实现了动态查看Cpu利用率以及Memory利用率。在不同的机型上通过top命令查看,有些机型总是为出现一直为0的情况。而此资源另辟蹊径,更大程度上兼容了市面上所有的机型。
  • 自己写的监控linux的linux流量,cpu利用率,磁盘利用率,内存利用率。并以每天,每周,每年4种图片报表呈现,记录了最大值和时间。具体步骤里面的文档有写
  • 如果单纯为了获得cpu利用率,通过top命令重定向可以轻松实现,命令如下: 复制代码 代码如下: top -bi > cpuHistory.log 或 复制代码 代码如下: top -bi | tee cpuHistory.log 这个就不解释了,不懂的朋友查询下...
  • vc利用程序的空闲时间idle执行特定代码以提高CPU利用率
  • 动态显示CPU利用率

    2013-04-25 21:39:13
    动态显示CPU利用率,可以实时得到CPU利用率参数
  • 基于ARIMA-BP神经网络的CPU利用率预测模型研究
  • 计算linux服务器CPU利用率

    万次阅读 2019-06-20 15:25:00
    文章目录一 通过top查看cpu各类占用信息二 通过/proc/stat文件查看cpu信息三 cpu占用计算公式四 代码实现 一 通过top查看cpu各类占用信息 如下图所示: us User time 用户时间 表示CPU 执行用户...

    一 通过top查看cpu各类率占用信息

    如下图所示:
    在这里插入图片描述

    usUser time用户时间表示CPU 执行用户进程的时间,包括nice时间。通常期望用户空间CPU 越高越好
    sySystem time系统时间表示CPU 在内核运行时间,包括IRQ 和softirq 时间。系统CPU 占用率高,表明系统某部分存在瓶颈,通常值越低越好
    niNice time优化时间系统调整进程优先级所花费的时间。
    idIdle time空闲时间系统处于空闲期,等待进程运行的时间。
    waWaiting time等待时间CPU 在等待I/O 操作完成所花费的时间。系统不应该花费大量时间来等待I/O 操, 否则说明I/O存在瓶颈。
    hiHard Irq time硬中断处理时间系统处理硬中断所花费的时间。
    siSoft Irq time软中断处理时间系统处理软中断所花费的时间。
    stSteal time丢失时间被强制等待(involuntary wait )虚拟 CPU 的时间,此时 hypervisor 在为另一个虚拟处理器服务。

    二 通过/proc/stat文件查看cpu信息

    在linux系统中,/proc/stat文件记录了cpu活动的各类详细信息,我们可以通过这个文件来计算出cpu的利用率。值得一提的是文件中的所有值都是系统自开机时刻到当前的累计值。

    首先,我们来看看/proc/stat文件里具体有什么信息:

    cat /proc/stat
    
    cpu  143981718 1653 19835190 651219576 474793 0 1795548 0 0 0
    cpu0 4922748 116 634217 35211530 33025 0 1054 0 0 0
    cpu1 7264010 6 724979 32772529 27436 0 87110 0 0 0
    cpu2 7265280 106 1592936 31897031 33649 0 85197 0 0 0
    cpu3 8825503 29 785288 31149702 27791 0 75427 0 0 0
    cpu4 7864655 10 813419 32075626 28549 0 107073 0 0 0
    cpu5 8649335 190 1348528 30743452 15312 0 84047 0 0 0
    cpu6 6918422 12 745619 33098715 35480 0 96065 0 0 0
    cpu7 6911914 2 1503204 32343557 31685 0 107606 0 0 0
    cpu8 8067154 301 760417 31947748 23598 0 96948 0 0 0
    cpu9 7956319 268 763990 32045354 20748 0 112129 0 0 0
    cpu10 8350317 10 863553 31466332 42994 0 113779 0 0 0
    cpu11 6958231 279 751582 32980023 23059 0 82738 0 0 0
    cpu12 6857693 30 1383365 32437960 30222 0 102721 0 0 0
    cpu13 6027713 73 896910 33822287 19033 0 89450 0 0 0
    cpu14 6611466 1 787552 33365812 14534 0 100703 0 0 0
    cpu15 6244280 2 2040406 32445853 20147 0 98755 0 0 0
    cpu16 8117104 8 1173451 31472941 15606 0 86714 0 0 0
    cpu17 7633190 104 785277 32361532 11750 0 88718 0 0 0
    cpu18 6345486 2 778699 33674417 12593 0 88518 0 0 0
    cpu19 6190891 95 701790 33907166 7573 0 90789 0 0 0
    intr 7124054096 26 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 39 0 0 47 0 0 0 89508674 0 0 0 0 0 0 0 0 0 0 0 0 0 101 0 0 0 0 0 0 0 0 365553 45796 0 326675 306514 322983 156258 166277 168551 115525 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 203663 0 0 58842159 179417102 160744835 182006220 189160682 198394762 178230438 182873083 178224428 186110541 247087544 210543678 216684749 183073272 204699369 200669565 216376267 208119645 199156143 194237301 1283 24079457 9 1062 2227 2570 9511496 6479573 9056319 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    ctxt 7627984946
    btime 1560589914
    processes 18553467
    procs_running 1
    procs_blocked 0
    softirq 5913064204 17 744470697 11078247 3780395442 47291 0 11998890 583315978 0 781757642
    

    行参数信息:

    cpu是所有cpu信息的总和值,我们之后计算cpu利用率用的就是这条信息
    cpu0, cpu1, … , cpu19是各个cpu的信息。(本服务器是20核cpu)
    intr是中断信息,第一个值是自系统启动以来,所发生的中断次数。
    ctxt是系统自启动以来cpu发生的上下文交换次数。
    btime是系统启动以来到当前位置的时间,单位秒。(资料上都是这么说的,但个人感觉很像一个时间戳)
    processes系统自启动以来创建的进程数。
    procs_running当前运行队列的任务的数目。
    procs_blocked当前被阻塞的任务数目

    列参数信息(以上每行cpu数字代表的含义):

    cpu 143981718 1653 19835190 651219576 474793 0 1795548 0 0 0
    
    usernicesystemidleiowaitirqsoftirq
    cpu143981718165319835190651219576474793017955480 0 0
    user从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
    nice从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
    system从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
    idle从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它空闲时间(单位:jiffies)
    iowait从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies)
    irq从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
    softirq从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

    三 cpu占用率计算公式

    需要注意的是由于/proc/stat文件中的各项值都是系统自启动以来的累计值。如果我们需要计算某时刻的cpu利用率,需要连续取2次文件的值,然后各自相减,再计算。 也就是:

    cpu_total = cpu_total_2 - cpu_total_1
    
    user = user_2 - user_1
    
    nice = nice_2 - nice_1
    
    idle = idle_2 - idle_1
    ......
    

    top中的各类cpu利用率计算公式:

    cpu_total= user + nice + system + idle + iowait + irq + softirq
    
    us = (user + nice ) / cpu_total * 100%
    
    sy = (systime + irq + softirq ) / cpu_total * 100%
    
    id = idle / cpu_total * 100%
    
    ni = nice / cpu_total * 100%
    
    wa = iowait / cpu_total * 100%
    
    hi = irq / cpu_total * 100%
    
    si = softirq / cpu_total * 100%
    
    (st 基本都是0)
    

    一般来说,如果我们只需要粗略计算出系统总的CPU的利用率,可以只取/proc/stat文件 cpu 这一行的值就可以了。因为这个cpu是所有子核的cpu总值。

    此外,

    cpu usage = (1 - idle / cpu_total) * 100% (除去cpu空闲时间外的其他所有cpu使用率,也可粗略计算为cpu利用率)

    或者,

    cpu usage = (user + nice + system)/ cpu_total * 100%


    四 代码实现

    import os
    
    # 获取cpu信息
    def get_CpuInfo(ip):
    
        total_list = []
        idle_list = []
        
        # 连续取2次文件
        for k in range(2):
            data = []
            
            # 这里是使用ssh命令获, 去服务器上获取信息
            # grep -w cpu 只过滤含cpu字段的行,刚好也就是我们需要的那一行信息
            cpu_cmd = 'ssh -q -o StrictHostKeyChecking=no %s cat /proc/stat |grep -w cpu' % ip
    
            res = os.popen(cpu_cmd, ).read().split()
    
            if not res:
                break
    
            for i in res:
                try:
                    if isinstance(eval(i), int):
                        data.append(i)
                except:
                    continue
    
            # print('cpu:' + str(data))
            total_cpu_time = sum([int(i) for i in data])
            total_list.append(total_cpu_time)
            idle_list.append(int(data[3]))
    
        if len(total_list) == 2:
            total = total_list[1] - total_list[0]
            idle = idle_list[1] - idle_list[0]
            pcpu = str(round(100 * (total - idle) / total, 2))
        else:
            print('%s:获取cpu信息失败' % ip)
            pcpu = '-1'
    
        return pcpu
    
    展开全文
  • 赋权后运行./CPU_test >>/opt/CPU.log,产生log文件分析CPU利用率
  • java 获取计算机cpu利用率和内存使用信息,需要的自己下载测试吧。
  • 对于路由器CPU利用率过高有什么好的解决办法呢?很大一部分朋友都不知道如何解决这个问题。下面小编就为大家介绍一下解决这个问题的方法吧,需要的朋友可以过来参考下
  • 让双核cpu利用率100%的代码,增加多线程就可以,如果想要内存满了,就不断开辟内存,仅仅是eclipse内存。 资源利用率 java 100% cpu 死机 资源利用率 java 100% cpu 死机 资源利用率 java 100% cpu 死机 资源利用率 ...
  • c# 得到cpu利用率

    2010-08-05 10:55:02
    用c#代码实现,cpu实时利用率显示!!
  • 注意:请不要下载这个,已经更新为V2版本,解决了一些错误。请下载V2版本 无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过
  • 获取CPU利用率

    2013-10-29 15:15:40
    教你如何利用VC获取CPU利用率,可以用于测试工控机性能,或者实现控制程序性能。
  • 批处理中如何提高CPU利用率

    千次阅读 多人点赞 2021-04-11 23:56:36
    在批处理中追求吞吐量,所以对CPU的利用率要求很高,这里有2种可以提高CPU利用率的技术。 一是代码生成技术(CodeGen),二是CPU亲和技术。 补充 CodeGen 拿 Spark 举例说明,Spark1.5版本中更新较大的是DataFrame...

    写在前面

    本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

    本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

    解答

    在批处理中追求吞吐量,所以对CPU的利用率要求很高,这里有2种可以提高CPU利用率的技术。
    
    一是代码生成技术(CodeGen),二是CPU亲和技术。
    

    在这里插入图片描述

    补充

    CodeGen

    拿 Spark 举例说明,Spark1.5版本中更新较大的是DataFrame执行后端的优化,引入了 CodeGen技术( Tungsten项目的一部分)。
    Spark通过 CodeGen在运行前将逻辑计划生成对应的机器执行代码,由Tungsten backend执行。
    以Spark为代表的基于内存的计算引擎使得I/O性能比传统的基于硬盘的计算引擎有10倍左右的提升,但与此同时,CPU的瓶颈会更明显。

    以传统 Postgresql的引擎为例,操作数据都被缓存到内存的Page Cache上面,执行最简单的Count()统计只能勉强达到每秒400万行左右,而真正需要的操作其实是很少的。

    传统的数据库处理引擎有四大短板:

    1. 其一是条件逻辑冗余,数据处理引擎代码非常烦琐;
    2. 其二是虚函数的调用;
    3. 其三是需要不断地从内存中调用数据,而无法一次性将数据从内存加载至 Cache;
    4. 其四是为了保证数据引擎能跨不同的硬件平台,数据引擎很少支持一些扩展的指令集,这就导致本来可以提升的性能没有得到支持。

    为了解决上述瓶颈,Google研发的Tenzing技术里面提出基于LVM编译框架实现动态生成代码的CodeGen技术,并且通过这个技术,基于MapReduce分布式框架下的类SQL系统的性能也能接近商业收费并行数据库的水准。

    使用CodeGen的好处有:

    1. 其一是简化了条件分支;
    2. 其二是内存加载,可以使用代码生成来替代数据加载,从而极大地减少了内存的读取,增加了 CPU Cache的利用率;
    3. 其三是内联虚函数的调用;
    4. 其四是能利用最新的指令集。

    CPU亲和技术

    简单地说,CPU亲和性(Affinity)是指进程要在某个给定的CPU上尽量长时间地运行而不被迁移到其他处理器的倾向性。

    Linux内核进程调度器天生就具有被称为软CPU亲和性(Affinity)的特性,这就意味着进程通常不会在处理器之间频繁迁移。
    2.6版本的 Linux内核还包含一种机制,它让开发人员可以编程实现硬CPU亲和性(Affinity),这意味着应用程序可以显式地指定进程在哪台(或哪些)处理器上运行。

    什么是Linux内核硬亲和性(Affinity)?
    在 Linux内核中,所有的进程都有一个相关的数据结构,称为 task_struct。其中与亲和性(Affinity)相关度最高的是 cpus_allowed位掩码。
    这个位掩码由n位组成,与系统中的n台逻辑处理器一一对应。具有4个物理CPU的系统可以有4位。如果这些CPU都启用了超线程,那么这个系统就有一个8位的位掩码。
    如果为给定的进程设置了给定的位,那么这个进程就可以在相关的CPU上运行。因此,如果一个进程可以在任何CPU上运行, 并且能够根据需要在处理器之间进行迁移,那么位掩码就全是1。
    实际上,这就是 Linux中进程的默认状态。

    Linux内核API提供了一些方法,如 sched_set_affinity(用来修改位掩码)和sched_get_affinity (用来查看当前的位掩码),让用户可以修改位掩码或查看当前的位掩码。
    注意, cpu_affinity会被传递给子线程,因此应该适当地调用 sched_set_affinity

    为什么应该使用硬亲和性(Affinity)?

    1. 充分利用 CPU Cache。
    2. 保障时间敏感的、决定性的进程的CPU利用。
    展开全文
  • C#获取程序CPU利用率

    千次阅读 2019-05-06 19:08:16
    /// <summary> /// 获取程序cpu利用率 /// </summary> internal static void UsingProcess(string processName) { try { int int...
      /// <summary>
            /// 获取程序cpu利用率
            /// </summary>
            internal static void UsingProcess(string processName)
            {
                try
                {
                    int interval = 1000;
                    var prevCpuTime = TimeSpan.Zero;
                    while (true)
                    {
                        Process[] myproceexe = Process.GetProcessesByName(processName);
                        if (myproceexe.Count() > 0)
                        {
                            var value = (myproceexe[0].TotalProcessorTime - prevCpuTime).TotalMilliseconds / interval / Environment.ProcessorCount * 100;
                            prevCpuTime = myproceexe[0].TotalProcessorTime;
                            MuCpuUntility = value.ToString();
                            Thread.Sleep(interval);
                        }
                        else
                        {
                            MuCpuUntility = "0";
                            Thread.Sleep(interval);
                        }
                    }
                }
                catch(Exception ex)
                {
                    AppLog.Write(ex.ToString(), LogMessageType.Error);
                    MuCpuUntility = "0";
                }
            }

    注意processName后面没有.exe

    展开全文
  • 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load、cpu、mem、qps、rt等。每个指标都有其独特的意义,很多时候在线上出现问题时,往往会伴随着某些指标的异常。大部分情况下,在问题发生之前,某些...

    平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load、cpu、mem、qps、rt等。每个指标都有其独特的意义,很多时候在线上出现问题时,往往会伴随着某些指标的异常。大部分情况下,在问题发生之前,某些指标就会提前有异常显示。


    上一篇文章中,我们介绍了一个重要的指标就是负载(Load),其中我们提到Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。本文就来分析其中的第二项,CPU的利用率。主要涉及CPU利用率的定义、查看CPU利用率方式、CPU利用率飙高排查思路等。

    什么是CPU利用率

    CPU利用率,又称CPU使用率。顾名思义,CPU利用率是来描述CPU的使用情况的,表明了一段时间内CPU被占用的情况。使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少。使用率的高低与你的CPU强弱有直接关系。

    在接下来深入介绍CPU的利用率之前,我们先来解释一个简单的概念,可能是很多人一直存在误解的地方。

    很多人都知道,现在我们用到操作系统,无论是Windows、Linux还是MacOS等其实都是多用户多任务分时操作系统。使用这些操作系统的用户是可以“同时”干多件事的,这已经是日常习惯了,并没觉得有什么特别。 但是实际上,对于单CPU的计算机来说,在CPU中,同一时间是只能干一件事儿的。为了看起来像是“同时干多件事”,分时操作系统是把CPU的时间划分成长短基本相同的时间区间,即"时间片",通过操作系统的管理,把这些时间片依次轮流地分配给各个用户使用。 如果某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做.此时CPU又分配给另一个作业去使用。 由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所"停顿",但用户察觉不出来,好像整个系统全由它"独占"似的。

    而我们说到的CPU的占用率,一般指的就是对时间片的占用情况。

    查看CPU利用率

    上一篇文章中,我们介绍过,使用uptimetopw等命令可以在Linux查看系统的负载情况。其中,top命令也可以用来查看CPU的利用率,除此之外,还可以使用vmstat来查看cpu的利用率。


    vmstat命令

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

    1➜  ~ vmstat
    2procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
    3 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    4 0  1      0 2446260      0 3202312    0    0   201 16304    1    6  0  0 84  5 1
    

    从上面的结果中我们可以看到很多信息,我们本文重点关注下cpu部分的指标。

    1us sy id wa st
    20  0  84  5 1
    

    以上几个指标是当前CPU的占用情况。

    %us:用户进程执行时间百分比

    us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。


    %sy:内核系统进程执行时间百分比

    sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。


    %id:空闲时间百分比


    %wa:IO等待时间百分比

    wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。


    %st:虚拟 CPU 等待实际 CPU 的时间的百分比

    一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。

    1➜  ~ vmstat 2 2
    2procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
    3 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    4 0  0      0 2479444      0 3165172    0    0   196 15905    2    8  0  0 84  5 11
    5 0  0      0 2479404      0 3165176    0    0     0  2804 81664 2715  0  0 90  1  9
    

    以上命令表示采集两次数据,每隔2秒采集一次。

    top命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

    1~ top
    2top - 10:58:07 up 18:13,  1 user,  load average: 0.32, 0.24, 0.19
    3Tasks:  64 total,   1 running,  63 sleeping,   0 stopped,   0 zombie
    4Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 92.8%id,  0.1%wa,  0.0%hi,  0.0%si,  6.8%st
    5Mem:   8388608k total,  5928076k used,  2460532k free,        0k buffers
    6Swap: 16777216k total,        0k used, 16777216k free,  3181996k cached
    7   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    8  2393 admin     20   0 5056m 2.2g  56m S  4.3 27.6  79:06.21 java
    9  1054 root      20   0  338m 9760 5112 S  0.3  0.1   2:37.30 logagent
    

    使用top命令,除了可以查看Load Avg以外,还可以显示CPU利用率信息。

    以上top命令打印的信息中(Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 92.8%id, 0.1%wa, 0.0%hi, 0.0%si, 6.8%st),第三行反映了当前cpu的整体情况。

    从上面的打印信息中我们还可以看到,ID为2393的java进程当前内存使用率最高,占到4.3%左右。

    由于Java是多线程的,所有,有些时候我们希望可以查看一个Java进程中所有线程的cpu使用率如何,也可以使用top命令来查看。

    1➜  ~ top -Hp 1893
    2PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    319163 admin     20   0 5056m 2.2g  56m S  1.7 27.6  17:39.97 java
    410649 admin     20   0 5056m 2.2g  56m S  0.7 27.6   4:07.64 java
    55884 admin     20   0 5056m 2.2g  56m S  0.3 27.6   2:18.19 java
    610650 admin     20   0 5056m 2.2g  56m S  0.3 27.6   1:24.77 java
    

    通过top -Hp 1893命令,我们可以发现,当前1893这个进程中,ID为19163的线程占用CPU最高,达到1.7%左右。

    PS:top命令的输出结果是动态的,随着系统的情况实时变化的。

    CPU使用率的计算逻辑

    描述系统cpu使用情况主要有一下几点:

    user 从系统启动到现在,CPU处于用户态的运行时间。不包含nice值为负的进程。

    nice 从系统启动到现在,CPUnice为负值的进程占用的cpu时间。

    system 从系统启动到现在,CPU处于内核态的运行时间。

    idle 从系统启动到现在,CPU除了 iowait外的等待时间。

    iowait 从系统启动到现在,CPUio 等待时间。

    irq 从系统启动到现在,CPU硬中断花费的时间。

    softirq 从系统启动到现在,CPU软中断花费的时间。

    steal 从系统启动到现在,CPU运行其他虚拟环境中的操作系统花费的时间。

    guest 从系统启动到现在,CPU运行在通过Linux内核控制的客户操作系统上的虚拟cpu的时间。

    guest_nice 从系统启动到现在,CPU运行在通过Linux内核控制的客户操作系统上的虚拟cpu的时间, nice 为负值进程。

    知道了以上参数的意思,计算某段时间内的cpu使用率就不难,由于cpu资源是在高速的变化,于是计算cpu使用率只能是在一段时间内的,设置两个时间点为t1和t2, CPU在t1和t2时间内总的使用时间:

    1( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2 + steal2 + guest2 + guest_nice2 ) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1 + steal1 + guest1 + guest_nice1)
    

    CPU的空闲时间:

    1(idle2 -idle1)
    

    CPU在t1和t2时间内的使用率

    1CPU非空闲时间/CPU总时间*100%=(1-CPU的空闲时间/CPU总时间)*100%
    

    则:

    1CPU(t1,t2)使用率:1-(idle2-idle1)/(( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2 + steal2 + guest2 + guest_nice2 ) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1 + steal1 + guest1 + guest_nice1))
    

    (参考资料:https://blog.csdn.net/IT_DREAM_ER/article/details/52037368)

    CPU利用率和负载

    我们上一篇文章介绍了系统的负载,本文介绍了CPU利用率,很多小伙伴就会分不清楚了,这两者之前到底有什么区别和联系呢?

    CPU利用率是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况。

    CPU负载是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。

    有一个很好的比喻,就是把CPU的使用比喻成排队打电话:

    我们将CPU就类比为电话亭,每一个进程都是一个需要打电话的人。现在有一个电话亭(单核计算机),有10个人需要打电话(10个进程)。现在使用电话的规则是管理员会按照顺序给每一个人轮流分配1分钟的使用电话时间,如果使用者在1分钟内使用完毕,那么可以将电话使用权返还给管理员,如果到了1分钟电话使用者还没有使用完毕,那么需要重新排队,等待再次分配使用。在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,同样也会有新来的人继续排队,这个人数的变化就相当于任务数的增减。

    CPU的Load统计一定时间段内,所有使用电话的人加上等待电话分配的人数的平均值。为了统计平均负载情况,我们5分钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。

    CPU利用率统计的进程在进入电话亭后,真正使用电话的时间和在电话亭停留的时间的比值。例如一个用户得到了一分钟的使用权,在10秒钟内打了电话,然后去查询号码本花了20秒钟,再用剩下的30秒打了另一个电话。那么他的利用率就是(10+30)/60

    Java Web应用CPU使用率飙高排查思路

    当发现系统的CPU使用率飙高时,首先要定位到是哪个进程占用的CPU较高。一般情况下,对于Java代码来说,导致CPU飙高可能由以下几个原因引起:

    1、内存泄露、导致大量Full GC(如典型的Java 1.7之前的String.subString导致的内存泄露问题) 2、代码存在死循环(如典型的多线程场景使用HashMap导致死循环的问题)

    这部分问题排查思路其实和我上一篇问文章的思路差不多,基本都是先定位到占用CPU较多的进程和线程,然后通过命令在查看这条线程执行情况。通过分析代码来定位其中的问题。

    这里就不重复介绍了,最重要的是熟练的使用jstackjstat以及jmap等命令来定位及解决Java进程的问题。

    展开全文
  • 我们通常所说的CPU利用率是指 “non-idle time”: 即CPU不执行 idle thread 的时间。 操作系统内核会在上下文切换时记录CPU的运行时间。 假设一个 non-idle thread 开始运行,100ms 后结束,内核会认为这段时间内 ...
  • 机器学习之CPU利用率预测

    千次阅读 2019-12-26 14:58:35
    利用上篇运维指令不用记,会用SQL就可以,可对CPU信息进行采集并结合机器学习算法对CPU利用率进行预测,从而让运维人员及时了解CPU未来运转情况,从容应对突发问题。 一、预测方法简述 预测算法属于监督式机器...
  • CPU时间片 为了提高程序执行效率,大家在很多应用中都采用了多线程模式,这样可以将原来的序列化执行变为并行执行,任务的分解以及并行执行能够极大地提高程序的运行效率。但这都是代码级别的表现,而硬件是如何...
  • 根据proc目录下的stat计算cpu的使用和内存使用情况
  • 在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。...
  • Linux cpu负载和cpu利用率的区别

    千次阅读 2019-09-02 19:23:58
    在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。 一、“load average” 含义: ...当CPU完全空闲的时候,平均负荷为0;当CPU工作量饱和的时候,平均负荷为1。那么很显然,"loa...
  • Linux系统中的CPU利用率

    千次阅读 2017-10-30 13:48:51
    CPU利用率是系统性能监控的重要指标。CPU利用率是开发人员系统性能优化的重要参考指标。当CPU总体利用率过高时,开发过程中需要根据具体情况进行考虑,在从程序层面优化还是从部署层面优化。
  • 在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 250,468
精华内容 100,187
关键字:

cpu利用率