精华内容
下载资源
问答
  • Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等
  • linux c程序获取cpu使用率及内存使用情况
  • linux下c/c++ 实现cpu使用率查询,内存使用率查询,当个程序使用查询 主要应用/proc/stat /proc/meminfo /proc/pid/stat /proc/pid/status 等文件中的内容进行计算
  • Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等,实际上大部分都和qt无关的,用其他语言也可以获取。 code: .h #ifndef RESOURCE_MINITOR_H #define RESOURCE_MINITOR_H #include #...

    Qt linux获取cpu使用率、内存、网络收发速度、磁盘读写速度、磁盘剩余空间等,实际上大部分都和qt无关的,用其他语言也可以获取。
    code:
    .h

    #ifndef RESOURCE_MINITOR_H
    #define RESOURCE_MINITOR_H
    #include <QObject>
    #include <QTimer>
    #include <QProcess>
    #include <QDebug>
    class resource_minitor : public QObject
    {
        Q_OBJECT
    public:
        explicit resource_minitor(QObject *parent = nullptr);
    private slots:
        void get_resource__();
    private:
        bool get_mem_usage__();
        bool get_net_usage__();
        bool get_disk_speed__();
        bool get_cpu_usage__();
        bool get_disk_space__();
        bool get_path_space(const QString & path);
    private:
        const int m_timer_interval__ = 1000;
        QTimer monitor_timer__;
        double m_send_bytes__ = 0;
        double m_recv_bytes__ = 0;
        double m_disk_read__ = 0;
        double m_disk_write__ = 0;
        double m_cpu_total__ = 0;
        double m_cpu_use__ = 0;
    };
    #endif // RESOURCE_MINITOR_H

    .cpp

    #include "resource_minitor.h"
    #include "sys/statfs.h"
    resource_minitor::resource_minitor(QObject *parent) : QObject(parent)
    {
        connect(&monitor_timer__, &QTimer::timeout, this, &resource_minitor::get_resource__);
        monitor_timer__.start(m_timer_interval__);
    }
    void resource_minitor::get_resource__()
    {
        get_cpu_usage__ ();
        get_disk_speed__();
        get_mem_usage__ ();
        get_net_usage__ ();
        get_disk_space__();
        get_path_space("/");
        qDebug()<<"\n";
    }
    bool resource_minitor::get_mem_usage__()
    {
        QProcess process;
        process.start("free -m"); //使用free完成获取
        process.waitForFinished();
        process.readLine();
        QString str = process.readLine();
        str.replace("\n","");
        str.replace(QRegExp("( ){1,}")," ");//将连续空格替换为单个空格 用于分割
        auto lst = str.split(" ");
        if(lst.size() > 6)
        {
            qDebug("mem total:%.0lfMB free:%.0lfMB",lst[1].toDouble(),lst[6].toDouble());
            return true;
        }
        return false;
    }
    bool resource_minitor::get_net_usage__()
    {
        QProcess process;
        process.start("cat /proc/net/dev"); //读取文件/proc/net/dev获取网络收发包数量,再除取样时间得到网络速度
        process.waitForFinished();
        process.readLine();
        process.readLine();
        while(!process.atEnd())
        {
            QString str = process.readLine();
            str.replace("\n","");
            str.replace(QRegExp("( ){1,}")," ");
            auto lst = str.split(" ");
            if(lst.size() > 9 && lst[0] == "enp2s0:")
            {
                double recv = 0;
                double send = 0;
                if(lst.size() > 1)
                    recv = lst[1].toDouble();
                if(lst.size() > 9)
                    send = lst[9].toDouble();
                qDebug("%s 接收速度:%.0lfbyte/s 发送速度:%.0lfbyte/s",lst[0].toStdString().c_str(),(recv - m_recv_bytes__) / (m_timer_interval__ / 1000.0),(send - m_send_bytes__) / (m_timer_interval__ / 1000.0));
                m_recv_bytes__ = recv;
                m_send_bytes__ = send;
            }
        }
        return true;
    }
    bool resource_minitor::get_cpu_usage__()
    {
        QProcess process;
        process.start("cat /proc/stat");
        process.waitForFinished();
        QString str = process.readLine();
        str.replace("\n","");
        str.replace(QRegExp("( ){1,}")," ");
        auto lst = str.split(" ");
        if(lst.size() > 3)
        {
            double use = lst[1].toDouble() + lst[2].toDouble() + lst[3].toDouble();
            double total = 0;
            for(int i = 1;i < lst.size();++i)
                total += lst[i].toDouble();
            if(total - m_cpu_total__ > 0)
            {
                qDebug("cpu rate:%.2lf%%",(use - m_cpu_use__) / (total - m_cpu_total__) * 100.0);
                m_cpu_total__ = total;
                m_cpu_use__ = use;
                return true;
            }
        }
        return false;
    }
    bool resource_minitor::get_disk_speed__()
    {
        QProcess process;
        process.start("iostat -k -d");
        process.waitForFinished();
        process.readLine();
        process.readLine();
        process.readLine();
        QString str = process.readLine();
        str.replace("\n","");
        str.replace(QRegExp("( ){1,}")," ");
        auto lst = str.split(" ");
        if(lst.size() > 5)
        {
            qDebug("disk read:%.0lfkb/s disk write:%.0lfkb/s",(lst[4].toDouble() - m_disk_read__ ) / (m_timer_interval__ / 1000.0),(lst[5].toDouble() - m_disk_write__) / (m_timer_interval__ / 1000.0));
            m_disk_read__ = lst[4].toDouble();
            m_disk_write__ = lst[5].toDouble();
            return true;
        }
        return false;
    }
    bool resource_minitor::get_disk_space__()
    {
        QProcess process;
        process.start("df -k");
        process.waitForFinished();
        process.readLine();
        while(!process.atEnd())
        {
            QString str = process.readLine();
            if(str.startsWith("/dev/sda"))
            {
                str.replace("\n","");
                str.replace(QRegExp("( ){1,}")," ");
                auto lst = str.split(" ");
                if(lst.size() > 5)
                    qDebug("挂载点:%s 已用:%.0lfMB 可用:%.0lfMB",lst[5].toStdString().c_str(),lst[2].toDouble()/1024.0,lst[3].toDouble()/1024.0);
            }
        }
        return true;
    }
    bool resource_minitor::get_path_space(const QString & path)
    {
        struct statfs diskInfo;
        statfs(path.toUtf8().data(), &diskInfo);
        qDebug("%s 总大小:%.0lfMB 可用大小:%.0lfMB",path.toStdString().c_str(),(diskInfo.f_blocks * diskInfo.f_bsize)/1024.0/1024.0,(diskInfo.f_bavail * diskInfo.f_bsize)/1024.0/1024.0);
        return true;
    }

    效果:
    这里写图片描述

    示例代码(Qt5.9工程):http://download.csdn.net/download/yangyang031213/10204938
    https://github.com/yangyang0312/cpp/tree/master/Qt/resource_minitor

    展开全文
  • Linux查看CPU使用率的一些命令

    千次阅读 2019-01-22 09:59:36
    在使用linux系统进行运维的过程中,我们经常要查看一下CPU使用率,以便观察以及分析系统的整体运行情况。 那么使用以下这些命令有何作用?我们一起看看: 1. top 使用频率比较高的命令,可在第三行看到cpu的...

    在使用linux系统进行运维的过程中,我们经常要查看一下CPU的使用率,以便观察以及分析系统的整体运行情况。

    那么使用以下这些命令有何作用?我们一起看看:

    1. top

    使用频率比较高的命令,可在第三行看到cpu的使用情况。

    [root@db 22:42 ~]$ top -bn 1 -i -c
    top - 22:52:17 up 55 days, 22:56,  2 users,  load average: 1.92, 2.31, 2.08
    Tasks: 266 total,   1 running, 265 sleeping,   0 stopped,   0 zombie
    Cpu(s):  2.4%us,  1.7%sy,  0.0%ni, 94.8%id,  0.0%wa,  0.0%hi,  1.1%si,  0.0%st
    Mem:   8062036k total,  6161944k used,  1900092k free,   167064k buffers
    Swap: 16777208k total,   539444k used, 16237764k free,  3075204k cached

      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                           
    11455 root      20   0 15160 1240  832 R  3.3  0.0   0:00.13 top -bn 1 -i -c        
                                              

    如上所示,top命令可以看到总体的系统运行状态和cpu的使用率 。

    %us:表示用户空间程序的cpu使用率(没有通过nice调度)

    %sy:表示系统空间的cpu使用率,主要是内核程序。

    %ni:表示用户空间且通过nice调度过的程序的cpu使用率。

    %id:空闲cpu

    %wa:cpu运行时在等待io的时间

    %hi:cpu处理硬中断的数量

    %si:cpu处理软中断的数量

    %st:被虚拟机偷走的cpu

    2. sar

    此命令不存在时需要安装sysstat包。

    [root@dbserver ~]# sar -P 0 -u 2 5
    Linux 5.4.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
    10:26:34 PM CPU %user %nice %system %iowait %steal %idle
    10:26:36 PM 0 41.00 0.00 55.00 4.00 0.00 0.00
    10:26:38 PM 0 8.27 0.00 27.81 62.88 1.01 0.00
    10:26:40 PM 0 2.07 0.00 15.28 81.63 1.02 0.00
    10:26:42 PM 0 4.13 0.00 24.69 72.16 1.03 0.00
    10:26:44 PM 0 4.14 0.00 23.68 72.16 1.03 0.00
    Average: 0 15.09 0.00 26.82 49.29 0.82 0.00

    进程队列长度和平均负责状态

    例如每2秒采集1次,共采集5次。

    [root@dbserver ~]# sar -q 2 5
    Linux 5.4.5-x86_64-linode52 (dbserver) 09/23/2017 _x86_64_ (1 CPU)
    10:28:37 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
    10:28:38 PM 1 131 0.35 0.44 0.41
    10:28:39 PM 2 132 0.34 0.43 0.41
    10:28:40 PM 1 133 0.34 0.43 0.41
    10:28:41 PM 2 134 0.31 0.42 0.40
    10:28:42 PM 1 133 0.31 0.42 0.40
    Average: 1 133 0.33 0.43 0.41

    输出项:

    runq-sz:运行队列的长度(等待运行的进程数)

    plist-sz:进程列表中进程(processes)和线程(threads)的数量

    ldavg-1:最后1分钟的系统平均负载(System load average)

    ldavg-5:过去5分钟的系统平均负载

    ldavg-15:过去15分钟的系统平均负载

    进程创建的平均值和上下文切换的次数

    例如每2秒收集1次,共收集5次。

    [root@dbserver  ~]# sar -w 2 5
    Linux 5.4.5-x86_64-linode52 (dbserver) 09/23/2017 _x86_64_ (1 CPU)
    10:44:03 PM proc/s cswch/s
    10:44:05 PM 1.01 156.57
    10:44:07 PM 1.00 132.00
    10:44:09 PM 2.00 201.00
    10:44:11 PM 2.02 126.26
    10:44:13 PM 2.00 114.00
    Average: 1.61 145.98

    sar命令也可以获取过去指定日期的性能参数。

    [root@dbserver ~]# sar -u -f /var/log/sa/sa20
    Linux 5.4.5-x86_64-linode52 (dbserver) 09/23/2017 _x86_64_ (1 CPU)
    11:10:01 PM CPU %user %nice %system %iowait %steal %idle
    11:20:02 PM all 25.78 0.00 8.88 3.59 0.15 61.60
    11:30:01 PM all 26.06 0.00 9.96 3.33 0.10 60.55
    11:40:01 PM all 25.73 0.00 9.17 3.70 0.09 61.32
    11:50:01 PM all 25.70 0.00 9.50 2.79 0.12 61.89
    12:00:01 PM all 26.70 0.00 9.73 2.20 0.10 61.28
    12:10:01 PM all 26.16 0.00 9.56 4.34 0.11 59.82
    12:20:01 PM all 25.49 0.00 9.61 2.76 0.07 62.07
    12:30:01 PM all 26.47 0.00 9.94 0.64 0.30 62.65
    12:40:02 PM all 27.32 0.00 10.37 3.86 0.15 58.30
    12:50:02 PM all 26.98 0.00 10.38 4.56 0.13 57.95
    Average: all 26.24 0.00 9.71 3.18 0.13 60.74

    3.vmstat

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存 交换情况,IO读写情况。相比top,通过vmstat可以看到整个机器的 CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率。

    [root@dbserver 23:20 ~]$ vmstat 2
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0 539444 1889712 167068 3077024    0    0     0     3    1    0  2  3 95  0  0    
     0  0 539444 1889704 167068 3077028    0    0     0     0 1474 1742  1  0 99  0  0    
     8  0 539444 1889704 167068 3077028    0    0     0     0 1472 1224  6  8 86  0  0  
     

     表示vmstat每2秒采集数据,一直采集,直到我们主动结束程序。

    参数详解

    Linux 内存监控vmstat命令输出分成六个部分:

    (1)进程procs
        r:在运行队列中等待的进程数
        b:在等待io的进程数
    (2)Linux 内存监控内存memoy
        swpd:现时可用的交换内存(单位KB)。
        free:空闲的内存(单位KB)。
        buff: 缓冲去中的内存数(单位:KB)。
        cache:被用来做为高速缓存的内存数(单位:KB)。
    (3) Linux 内存监控swap交换页面
        si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
        so: 从内存交换到磁盘的交换页数量,单位:KB/秒。
    (4)Linux 内存监控 io块设备:
        bi: 发送到块设备的块数,单位:块/秒。
        bo: 从块设备接收到的块数,单位:块/秒。
    (5)Linux 内存监控system系统:
        in: 每秒的中断数,包括时钟中断。
        cs: 每秒的环境(上下文)转换次数。
    (6)Linux 内存监控cpu中央处理器:
        cs:用户进程使用的时间 。以百分比表示。
        sy:系统进程使用的时间。 以百分比表示。
        id:中央处理器的空闲时间 。以百分比表示。

    常见诊断:

    1) 假如 r 经常大于4 ,且 id 经常小于40,表示中央处理器的负荷很重。

    2) 假如 bi,bo 长期不等于0,表示物理内存容量太小。

    每个参数的具体意思如下:

    r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈 了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队 列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

    b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

    swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

    free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

    buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

    cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

    si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

    so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

    bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

    bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

    in 每秒CPU的中断次数,包括时间中断

    cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的 数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或 者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核 空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的 时间少了,CPU没有充分利用,是不可取的。

    us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

    sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

    id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

    wt 等待IO CPU时间。

    4.dstat

    每秒cpu使用率情况获取

    [root@dbserver 23:27 ~]$ dstat -c
    ----total-cpu-usage----
    usr sys idl wai hiq siq
      2   2  95   0   0   1
      4   2  92   0   0   2
     11   7  75   0   0   6
      2   2  96   0   0   0
      0   0  99   0   0   0

    最占cpu的进程获取
    [root@dbserver 23:29 ~]$ dstat --top-cpu
    -most-expensive-
      cpu process   
    java         2.6
    java         3.1
    java          21
    java         0.1
    java         0.6


     

    展开全文
  • Linux中如果要监视一个进程的运行情况,如查看它的CPU使用效率和内存使用情况,就需要从系统的/proc目录的读取一些系统信息。本文介绍了获得系统CPU和内存情况的代码。
  • 通过读取/proc/stat文件获取当前系统的CPU占用Linux系统上的/proc目录是一种文件系统,即proc文件系统,与其它常见的文件系统不同的是,/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。...

    一、功能介绍

    通过读取/proc/stat文件获取当前系统的CPU占用率。

    Linux系统上的/proc目录是一种文件系统,即proc文件系统,与其它常见的文件系统不同的是,/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

    /proc/stat文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致。

    wbyq@wbyq:/mnt/hgfs/linux-share-dir/linux_c$ cat /proc/stat 
    cpu  673896 219583 260680 4878312 1821 0 4364 0 0 0
    cpu0 320077 75898 124098 2490890 1231 0 2451 0 0 0
    cpu1 353819 143684 136582 2387421 589 0 1913 0 0 0
    intr 16591367 3 19561 0 0 0 0 0 0 1 0 0 0 1033239 0 0 0 360062 318044 40 343791 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1154266 0 0 15434 5315 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 28277855
    btime 1598774265
    processes 117139
    procs_running 1
    procs_blocked 0
    softirq 9953753 74 4098860 4860 347201 336159 0 26182 2177955 0 2962462
    wbyq@wbyq:/mnt/hgfs/linux-share-dir/linux_c$ 

    二、代码实现 

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    typedef struct cpu_occupy_          //定义一个cpu occupy的结构体
    {
        char name[20];                  //定义一个char类型的数组名name有20个元素
        unsigned int user;              //定义一个无符号的int类型的user
        unsigned int nice;              //定义一个无符号的int类型的nice
        unsigned int system;            //定义一个无符号的int类型的system
        unsigned int idle;              //定义一个无符号的int类型的idle
        unsigned int iowait;
        unsigned int irq;
        unsigned int softirq;
    }cpu_occupy_t;
    
    double cal_cpuoccupy (cpu_occupy_t *o, cpu_occupy_t *n)
    {
        double od, nd;
        double id, sd;
        double cpu_use ;
    
        od = (double) (o->user + o->nice + o->system +o->idle+o->softirq+o->iowait+o->irq);//第一次(用户+优先级+系统+空闲)的时间再赋给od
        nd = (double) (n->user + n->nice + n->system +n->idle+n->softirq+n->iowait+n->irq);//第二次(用户+优先级+系统+空闲)的时间再赋给od
    
        id = (double) (n->idle);    //用户第一次和第二次的时间之差再赋给id
        sd = (double) (o->idle) ;    //系统第一次和第二次的时间之差再赋给sd
        if((nd-od) != 0)
            cpu_use =100.0 - ((id-sd))/(nd-od)*100.00; //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used
        else 
            cpu_use = 0;
        return cpu_use;
    }
    
    void get_cpuoccupy (cpu_occupy_t *cpust)
    {
        FILE *fd;
        int n;
        char buff[256];
        cpu_occupy_t *cpu_occupy;
        cpu_occupy=cpust;
    
        fd = fopen ("/proc/stat", "r");
        if(fd == NULL)
        {
                perror("fopen:");
                exit (0);
        }
        fgets (buff, sizeof(buff), fd);
    
        sscanf (buff, "%s %u %u %u %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle ,&cpu_occupy->iowait,&cpu_occupy->irq,&cpu_occupy->softirq);
    
        fclose(fd);
    }
    
    double get_sysCpuUsage()
    {
        cpu_occupy_t cpu_stat1;
        cpu_occupy_t cpu_stat2;
        double cpu;
        get_cpuoccupy((cpu_occupy_t *)&cpu_stat1);
        sleep(1);
        //第二次获取cpu使用情况
        get_cpuoccupy((cpu_occupy_t *)&cpu_stat2);
    
        //计算cpu使用率
        cpu = cal_cpuoccupy ((cpu_occupy_t *)&cpu_stat1, (cpu_occupy_t *)&cpu_stat2);
    
        return cpu;
    }
    
    int main(int argc,char **argv)
    {
        while(1)
        {
            printf("CPU占用率:%f\n",get_sysCpuUsage());
        }
        return 0;
    }
    

    三、ubuntu18.04下运行效果

    四、redhat6.3系统上运行效果

     

    展开全文
  • 编程获取linuxCPU使用率内存占用率

    万次阅读 2014-10-09 09:01:45
    Linux下提供top、ps命令查看当前cpu、mem使用情况,简要介绍如下: 一、使用ps查看进程的资源占用 ps -aux 查看进程信息时,第三列就是CPU占用。 [root@localhost utx86]# ps -aux | grep my_process Warning: ...
    Linux下提供top、ps命令查看当前cpu、mem使用情况,简要介绍如下:
    

    一、使用ps查看进程的资源占用

    ps -aux

    查看进程信息时,第三列就是CPU占用。

    [root@localhost utx86]# ps -aux | grep my_process
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ



    root   14415  3.4  0.9   37436  20328  pts/12   SL+  14:18   0:05 ./my_process
    root   14464  0.0   0.0   3852   572    pts/3    S+   14:20   0:00 grep my_process
    每一列含义如下

    USER   PID   %CPU %MEM  VSZ  RSS TTY  STAT   START  TIME   COMMAND

    即my_process进程当前占用cpu 3.4%, 内存0.9%

    二、top动态查看系统负荷

    top -n 1

    显示后退出

    [root@localhost utx86]# top -n 1
    top - 14:23:20 up  5:14, 14 users,  load average: 0.00, 0.04, 0.01
    Tasks: 183 total,   1 running, 181 sleeping,   1 stopped,   0 zombie
    Cpu(s):  1.8%us,  1.4%sy,  0.0%ni, 95.8%id,  0.7%wa,  0.1%hi,  0.2%si,  0.0%st
    Mem:   2066240k total,  1507316k used,   558924k free,   190472k buffers
    Swap:  2031608k total,       88k used,  2031520k free,  1087184k cached

    1、获取cpu占用情况

    [root@localhost utx86]# top -n 1 |grep Cpu
    Cpu(s):  1.9%us,  1.3%sy,  0.0%ni, 95.9%id,  0.6%wa,  0.1%hi,  0.2%si,  0.0%st

    解释:1.9%us是用户占用cpu情况

    1.3%sy,是系统占用cpu情况

    得到具体列的值:

    [root@localhost utx86]# top -n 1 |grep Cpu | cut -d "," -f 1 | cut -d ":" -f 2
    1.9%us
    [root@localhost utx86]# top -n 1 |grep Cpu | cut -d "," -f 2
    1.3%sy

    2、获得内存占用情况

    [root@localhost utx86]# top -n 1 |grep Mem
    Mem:   2066240k total,  1515784k used,   550456k free,   195336k buffers

    获得内存情况指定列

    [root@localhost c++_zp]# top -n 1 |grep Mem | cut -d "," -f 1 | cut -d ":" -f 2
    2066240k total
    [root@localhost c++_zp]# top -n 1 |grep Mem | cut -d "," -f 2
    1585676k used

    三、编程实现

    现在可以通过程序将cpu使用率、内存使用情况保存到文件中
    // test.cpp
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    int main()
    {
    system("top -n 1 |grep Cpu | cut -d \",\" -f 1 | cut -d \":\" -f 2 >cpu.txt");
    system("top -n 1 |grep Cpu | cut -d \",\" -f 2 >>cpu.txt");
    system("top -n 1 |grep Mem | cut -d \",\" -f 1 | cut -d \":\" -f 2 >>cpu.txt");
    system("top -n 1 |grep Mem | cut -d \",\" -f 2 >>cpu.txt");
    return 0;
    }

    编译、运行:

    [root@localhost study]# g++ test.cpp
    [root@localhost study]# ./a.out
    [root@localhost study]# cat cpu.txt
    2.1%us
    1.5%sy
    2066240k total
    1619784k used

    四、硬盘使用率编程实现

    1.硬盘使用率 命令df -lh

    2.程序实现,调用statfs

    int statfs(const char *path, struct statfs *buf);
    int fstatfs(int fd, struct statfs *buf);
    struct statfs {
    long    f_type;    /* type of filesystem (see below) */
    long    f_bsize;    /* optimal transfer block size */
    long    f_blocks;  /* total data blocks in file system */
    long    f_bfree;    /* free blocks in fs */
    long    f_bavail;  /* free blocks avail to non-superuser */
    long    f_files;    /* total file nodes in file system */
    long    f_ffree;    /* free file nodes in fs */
    fsid_t  f_fsid;    /* file system id */
    long    f_namelen;  /* maximum length of filenames */
    };


    int fstatvfs(int fildes, struct statvfs *buf);
    int statvfs(const char *restrict path, struct statvfs *restrict buf);

    struct statvfs {
    unsigned long  f_bsize;    /* file system block size */
    unsigned long  f_frsize;  /* fragment size */
    fsblkcnt_t    f_blocks;  /* size of fs in f_frsize units */
    fsblkcnt_t    f_bfree;    /* # free blocks */
    fsblkcnt_t    f_bavail;  /* # free blocks for non-root */
    fsfilcnt_t    f_files;    /* # inodes */
    fsfilcnt_t    f_ffree;    /* # free inodes */
    fsfilcnt_t    f_favail;  /* # free inodes for non-root */
    unsigned long  f_fsid;    /* file system id */
    unsigned long  f_flag;    /* mount flags */
    unsigned long  f_namemax;  /* maximum filename length */
    };


    #include <sys/vfs.h>
    #include <sys/statvfs.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    int gethd(char *path);
    int main()
    {
    char buf[256],*ptr;
    FILE *file;
    while(1)
    {
    file=fopen("/etc/fstab","r");
    if(!file)return;
    memset(buf,0,sizeof(buf));
    while(fgets(buf,sizeof(buf),file))
    {
    ptr=strtok(buf," ");
    if(ptr&&((strncmp(ptr,"/dev",4)==0)))
    {
    ptr=strtok(NULL," ");
    gethd(ptr);
    }
    }
    fclose(file);
    sleep(2);
    }
    }

    int gethd(char *path)
    {
    struct statvfs stat1;
    statvfs(path,&stat1);
    if(stat1.f_flag)
    printf("%s total=%dK free=%dK %0.1f%%

    \n",path,stat1.f_bsize*stat1.f_blocks/1024,stat1.f_bsize*stat1.f_bfree/1024,

    ((float)stat1.f_blocks-(float)stat1.f_bfree)/(float)stat1.f_blocks*100);
    }

     



    shell

     

    监视磁盘hda1

    #!/bin/sh
    # disk_mon
    # monitor the disk space
    # get percent column and strip off header row from df
    LOOK_OUT=0
    until [ "$LOOK_OUT" -gt "90" ]
    do
      LOOK_OUT=`df | grep /hda1 | awk '{print $5}' | sed 's/%//g'`
      echo $LOOK_OUT%
      sleep 1
    done

    echo "Disk hda1 is nearly full!"

     

    hdtest.sh

    #!/bin/ksh
    #检测硬盘剩余空间并警告的shell&nbspV050921

    #简单说明: 可由root用户将此脚本加入crontab,启动时间一般最好设为每天营业前,当此脚本启动时如检测到已用硬盘空间超过指定范围,则将hdwarning.sh脚本拷贝到指定用户根目录下;否则将删除指定用户的目录下的hdwarning.sh脚本.

    usedhd=80           #自定义超限已用硬盘空间大小比例,默认为80%
    test "$1" &&&nbspuserdir=$1 ||&nbspuserdir=/usr/scabs  #前台用户的目录(默认设为统版用户),也可在调用此脚本时加上指定前台用户的目录参数

    hdwarning=$(df&nbsp-v |sed '1d;s/.$//;s/\/dev\///'|awk '$6>'"$usedhd"' {print $2," = ",$6"%"}')
    test "$hdwarning" && {&nbspcp /usr/bin/hdwarning.sh ${userdir}/hdwarning.sh  \
    > ${userdir}/hdwarning.log &nbspchmod&nbsp777 ${userdir}/hdwarning.sh ${userdir}/hdwarning.log  } \
    || {&nbsprm ${userdir}/hdwarning.sh&nbsp2>/dev/null  \
    mv ${userdir}/hdwarning.log ${userdir}/hdwarning.log.bak&nbsp2>/dev/null  }

    hdwarning.sh

    #!/bin/ksh
    #检测硬盘剩余空间并警告的shell&nbspV050921
    #增加当超标时,只在预先指定的前N位预先的指定用户登录时才显示提示信息,
    #即只有这前面N位用户才有可能及时反馈,避免当超标时接到过多的前台反馈电话&nbspV050923

    #请先编辑指定用户根下的&nbsp.profile ,在最后追加一行
    # &nbsptest&nbsp-x&nbsphdwarning.sh && &nbsp./hdwarning.sh
    #若.profile最后已加入了自启动专用程序命令行,则请在此行前面插入上述行

    #简单说明: 当指定用户登录后,若当前目录中hdwarning.sh脚本存在(一般此
    #时硬盘已用空间已经超标),则运行此脚本,并在屏幕显示警告信息,此时终端
    #操作人员应该及时将此信息把馈给预先指定的部门或预先指定的管理人员,
    #以便作相应的处理.若未超标或已清理磁盘文件并达标,则将删除脚本自身
    #hdwarning.sh(取消登录时的检测和警告信息)

    usedhd=80               #自定义超限已用硬盘空间大小比例,默认为80%
    loginnum=10             #自定义最初登录反馈的用户数,默认为前&nbsp10 位
    name="运维部"           #接受反馈的部门或管理人员  
    tel="2113714&nbsp2110394"   #接受反馈的部门或管理人员的联系方式或电话
    test "$1" &&&nbspuserdir=$1 ||&nbspuserdir=/usr/scabs  #前台用户的目录(默认设为统版用户),也可在调用此
    #脚本时加上指定前台用户的目录参数
    hdwaring()
    {&nbspttyname=$(tty)
    echo ${ttyname##*

     

     

     

     

     

     

    shell cpu====================================================================:

    /proc目路下的内存文件系统映射了系统的运行时的一些信息,包括进程列表,
    内存信息,CPU使用情况,还有网络等等
    所以可以通过读/proc下的文件来实现统计信息的获取
    但是,要注意的时不同的版本,将/proc下的每个文件中的类容会有一些差别,每一个项代表什么要自己分析,最好根据top的输出去分析
    然后就可以通过shell教本或者C取得CPU使用率
    比如:
    我的机子是AS4(Kernel 2.6.9-5)
    cat /proc/stat
    cpu  1047871 11079 394341 1157538880 4909104 1945 61338
    cpu0 352894 2950 157917 290318045 109839 0 49564
    cpu1 234860 1978 115148 288108962 2522748 1028 6391
    cpu2 106253 1674 52273 288601985 2225180 909 2839
    cpu3 353863 4477 69001 290509888 51337 6 2543
    intr 3021292348 2939335896 720 0 12 12 0 7 2 1 0 0 0 1951 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7217173 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 74736544 0 0 0 0 0 0 0 0 0 0 0 0 0
    ctxt 379682110
    btime 1158715143
    processes 603543
    procs_running 1
    procs_blocked 0
    然后就可以自己计算了

    1. #########GetCPU.sh
    2. ######Author:duanjigang
    3. #!/bin/sh
    4. while true
    5. do
    6. awk  '$1=="cpu"{Total=$2+$3+$4+$5+$6+$7;print "Free: " $5/Total*100"%
    7. " " Used: " (Total-$5)*100/Total"%"}' </proc/stat
    8. sleep 1
    9. done
    复制代码

    #./GetCPU.sh
    Free: 99.4532% Used: 0.546814%
    Free: 99.4532% Used: 0.546813%
    Free: 99.4532% Used: 0.546813%
    Free: 99.4532% Used: 0.546813%
    这样应该可以的


     

     

     

    shell cpu MEM====================================================================:


    (1):取CPU使用率
    机器:LinuxAS4 2.6.9-5.ELsmp (不通版本的内核会有差异的)
    1. #cpu.sh-to get the utilization of every cpu
    2. #author:duanjigang<2006/12/28>
    3. #!/bin/sh
    4. awk '$0 ~/cpu[0-9]/' /proc/stat  | while read line
    5. do
    6. echo "$line" | awk '{total=$2+$3+$4+$5+$6+$7+$8;free=$5;\
    7.                print$1" Free "free/total*100"%",\
    8.                 "Used " (total-free)/total*100"%"}'
    9. done
    复制代码

    #chmod +x cpu.sh
    #./cpu.sh
    cpu0 Free 99.7804% Used 0.219622%
    cpu1 Free 99.8515% Used 0.148521%
    cpu2 Free 99.6632% Used 0.336765%
    cpu3 Free 99.6241% Used 0.375855%

    (2)网络流量情况
    1. #if.sh-to get the network flow of each interface
    2. #for my beloved ning
    3. #author:duanjigang<2006/12/28>
    4. #!/bin/sh
    5. echo "name    ByteRec   PackRec   ByteTran   PackTran"
    6. awk   ' NR>2' /proc/net/dev  | while read line
    7. do
    8. echo "$line" | awk -F ':' '{print "  "$1"  " $2}' |\
    9.        awk '{print $1"   "$2 "    "$3"   "$10"  "$11}'
    10. done
    复制代码

    #./if.sh
    name    ByteRec   PackRec   ByteTran   PackTran
    lo   2386061    17568   2386061  17568
    eth0   1159936483    150753251   190980687  991835
    eth1   0    0   0  0
    sit0   0    0   0  0

    (3):端口情况
    http://bbs.chinaunix.net/viewthread.php?tid=864757&highlight=duanjigang
    (4)至于内存
    cat /proc/meminfo | grep "MemTotal"
    cat /rpco/meninfo  | grep "MemFree"

    就可以了吧


    计算内存利用率需要从 /proc/meminfo 文件中取相应数据,文件内容如下:
    MemTotal:      1024008 kB
    MemFree:         18448 kB
    Buffers:         12664 kB
    Cached:         282500 kB
    SwapCached:        716 kB
    Active:         816124 kB
    Inactive:        52516 kB
    HighTotal:      122500 kB
    HighFree:          304 kB
     
    … …
     
    MemTotal 数值表示内存总量, MemFree 数值表示空余数量。
    所以内存的即时利用率计算公式
    (MemTotal - MemFree)/ MemTotal

    安装上篇文章的原则,使用C语言写了一段程序来计算CPU和内存利用率:

    /*************************************************************
    le:        statusinfo.c
     *
     *    @brief:        从linux系统获取cpu及内存使用情况
     *
     *    @version    1.0
     *
     ***************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct PACKED         //定义一个cpu occupy的结构体
    {
    	char name[20];      //定义一个char类型的数组名name有20个元素
    	unsigned int user; //定义一个无符号的int类型的user
    	unsigned int nice; //定义一个无符号的int类型的nice
    	unsigned int system;//定义一个无符号的int类型的system
    	unsigned int idle; //定义一个无符号的int类型的idle
    	unsigned int lowait;
    	unsigned int irq;
    	unsigned int softirq;
    }CPU_OCCUPY;
    
    typedef struct __MEM
    {
    //	unsigned char name[20];
    	float total;
    	float free;
    	}MEM;
    
    int get_meminfo()
    {
    	MEM meminfo;
    	memset(&meminfo,0x00,sizeof(MEM));
    	FILE* fp = fopen("/proc/meminfo","r");
    
    	if(fp == NULL)
    	{
    		printf("Can not open file\r\n");
    		return 0;
    	}
    	
    	char buf[64];
    	char name[32];
    	memset(buf,0x00,sizeof(buf));
    	fgets(buf,sizeof(buf),fp);
    	sscanf(buf,"%s %f %s",name,&meminfo.total,name);
    	memset(buf,0x00,sizeof(buf));
    	fgets(buf,sizeof(buf),fp);
    	sscanf(buf,"%s %f %s",name,&meminfo.free,name);
    	printf("buf is %s  name is %s %f\r\n",buf,name,meminfo.free);
    	float temp;
    
    	sscanf(buf,"%s			%f %s",name,&temp,name);
    	printf("temp is %f \r\n",temp);
    	double rate = (meminfo.total - meminfo.free)/meminfo.total;
    	printf("%f  %f	rate is %f\r\n",meminfo.total,meminfo.free,rate);
    	fclose(fp);
    	return 1;
    }
    
    int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n) 
    {   
    	unsigned long od, nd;    
    	unsigned long id, sd;
    	double cpu_use = 0;   
    
    	od = (unsigned long) (o->user + o->nice + o->system +o->idle + o->lowait + o->irq + o->softirq);//第一次(用户+优先级+系统+空闲)的时间再赋给od
    	nd = (unsigned long) (n->user + n->nice + n->system +n->idle + n->lowait + n->irq + n->softirq);//第二次(用户+优先级+系统+空闲)的时间再赋给od
    
    	double sum = nd - od;
    	double idle = n->idle - o->idle;
    	cpu_use = idle/sum;
    
    
    	printf("%f\r\n",cpu_use);
    
    	idle = n->user + n->system + n->nice -o->user - o->system- o->nice;
    	cpu_use = idle/sum;
    
    	printf("%f\r\n",cpu_use);
    	return 0;
    }
    
    void get_cpuoccupy (CPU_OCCUPY *cpust) //对无类型get函数含有一个形参结构体类弄的指针O
    {   
    	FILE *fd;         
    	int n;            
    	char buff[256]; 
    	CPU_OCCUPY *cpu_occupy;
    	cpu_occupy=cpust;
    
    	fd = fopen ("/proc/stat", "r"); 
    	fgets (buff, sizeof(buff), fd);
    	printf("%s\r\n",buff);
    	sscanf (buff, "%s %u %u %u %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle,&cpu_occupy->lowait,&cpu_occupy->irq,&cpu_occupy->softirq);
    	printf("%s %u %u %u %u %u %u %u\r\n", cpu_occupy->name,cpu_occupy->user, cpu_occupy->nice,cpu_occupy->system, cpu_occupy->idle,cpu_occupy->lowait,cpu_occupy->irq,cpu_occupy->softirq);
    	printf("%s %u\r\n", cpu_occupy->name,cpu_occupy->user);
    	fclose(fd);     
    }
    
    int main()
    {
    	CPU_OCCUPY cpu_stat1;
    	CPU_OCCUPY cpu_stat2;
    	MEM_OCCUPY mem_stat;
    	int cpu;
    	//第一次获取cpu使用情况
    	get_cpuoccupy((CPU_OCCUPY *)&cpu_stat1);
    	sleep(10);
    
    	//第二次获取cpu使用情况
    	get_cpuoccupy((CPU_OCCUPY *)&cpu_stat2);
    
    	//计算cpu使用率
    	cpu = cal_cpuoccupy ((CPU_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2);
    	printf("%d \r\n",cpu);	 
    	//获取内存
    	get_meminfo();
    	return 0;
    } 
    



    展开全文
  • 1:封装成一个类,直接调用即可。...3:linuxCPU占用的计算非常准确,支持多核。 4:硬盘容量计算极速。进度条显示占用比例。 5:多彩数码管实时显示当前时间。 6:自定义颜色下拉框,选择即可看到效果。
  • Linux下如何获取cpu的利用

    千次阅读 2017-08-08 09:56:00
    "proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存...这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc文件系统修改内核的相关配置。 1、从/proc文件系统获取相关...
  • 写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程,于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教
  • 注意:请不要下载这个,已经更新为V2版本,解决了一些错误。请下载V2版本 无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过
  • Linux系统查看CPU使用率、内存使用率、磁盘使用率

    万次阅读 多人点赞 2019-04-16 15:17:00
    一、查看CPU使用率 1. top 命令 top命令可以看到总体的系统运行状态和cpu的使用率 。 %us:表示用户空间程序的cpu使用率(没有通过nice调度) %sy:表示系统空间的cpu使用率,主要是内核程序。 %ni:表示用户空间...
  • 本资源能获取电脑的CPU和内存的使用率,也能够跨平台使用包括Windows、macOS、Linux,调用方法简单,里面是一个pri文件,直接可以加在自己的工程里面,调用方法有说明
  • c++获取cpu使用率(包含系统和单进程)含多个例子 c++获取cpu使用率(包含系统和单进程)含多个例子 c++获取cpu使用率(包含系统和单进程)含多个例子
  • linux获取cpu利用shell脚本

    万次阅读 2014-02-12 16:54:19
    github地址:https://raw.github.com/aspirer/scripts/master/cpu_rate.sh ...cpu_num=`cat /proc/stat | grep cpu[0-9] -c` start_idle=() start_total=() cpu_rate=() cpu_rate_file=./`hos
  • Linux下使用java获取cpu、内存使用率

    千次阅读 2019-09-25 05:45:14
    思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类的exec()方法执行命令"top”,获取"top"的输出,从而得到CPU和内存的使用情况。 使用top命令获取系统信息: top -b -n -1...
  • 无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过 更新为2.0版,解决了windows系统中计算错误,适应不同的windows版本和linux版本
  • C++ 获取进程CPU占用

    2020-08-26 03:25:28
    主要介绍了C++ 获取进程CPU占用,需要的朋友可以参考下
  • 本篇文章主要介绍详解C#获取特定进程CPU和内存使用率,非常具有实用价值,需要的朋友可以参考下。
  •  psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现...
  • Linux系统下获取CPU使用率

    千次阅读 2018-04-23 16:56:21
    #include &lt;stdio.h&gt; #include &lt;string.h&...typedef struct cpu_info { char name[8]; unsigned long user; unsigned long nice; unsigned long system; unsigned long i...
  • linux获取cpu、磁盘、内存占用代码
  • 树莓派Linux获取当前CPU使用状态python脚本
  • linux 查看CPU使用率

    千次阅读 2019-02-18 11:14:06
    top命令可以看到总体的系统运行状态和cpu使用效率 %us: 表示用户空间程序的cpu使用效率 %sy:表示系统空间程序的cpu使用效率 %ni: 表示用户空间通过nice调度过的程序的cpu使用效率 %id: 空闲cpu %wa:cpu运行时...
  • 本文介绍了Linux下查看某一进程的CPU占用的方法。
  • linux获取当前进程的CPU使用率

    千次阅读 2013-08-26 16:55:27
    查看了下win下获取的原理,就是一段时间里,系统态运行时间加上用户态运行时间,除以这段时间,就所CPU使用率。 仿照写了以下代码 先所获取当前时间的函数,用于计算时间流逝,精确到纳秒。 int64_t get_ticket() { ...
  • 说明:cpu使用率,可以采用jdk8原生的方法,但是有博客说不太准确,这里不做说明。 import cn.hzp.util.linuxinfo.bean.CpuInfoBean; import com.sun.management.OperatingSystemMXBean; import l
  • chown -R dianftp hroisapp1.log 2.查看服务器使用情况,输入top再输入1可查看linux服务器cpu数量 ...查看对应cpu使用最高的对应进程的线程 top -H -p 191211 3.查看服务器硬盘大小 df -h 4. ...
  • QT获取cpu使用率

    千次阅读 2018-09-12 09:31:39
    double getCpuUsage() { #ifdef Q_OS_WIN  static FILETIME s_preIdleTime = { 0, 0 };  static FILETIME s_preKernelTime = { 0, 0 };  static FILETIME s_preUserTime = { 0, 0 };  static bool isFi...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,790
精华内容 25,916
关键字:

linux获取cpu使用率

linux 订阅