计算Linux系统和进程的CPU及内存使用率

合集下载

查看Linux系统内存、CPU、磁盘使用率和详细信息

查看Linux系统内存、CPU、磁盘使用率和详细信息

查看Linux系统内存、CPU、磁盘使⽤率和详细信息⼀、查看内存占⽤1、free# free -m以MB为单位显⽰内存使⽤情况[root@localhost ~]# free -mtotal used free shared buff/cache availableMem: 118521250866841019349873Swap: 601506015# free -h以GB为单位显⽰内存使⽤情况[root@localhost ~]# free -htotal used free shared buff/cache availableMem: 11G 1.2G 8.5G 410M 1.9G 9.6GSwap: 5.9G 0B 5.9G# free -t以总和的形式查询内存的使⽤信息[root@localhost ~]# free -ttotal used free shared buff/cache availableMem: 1213733212853448870628420268198136010105740Swap: 616038006160380Total: 18297712128534415031008# free -s 5周期性的查询内存使⽤信息每5秒执⾏⼀次命令[root@localhost ~]# free -s 5total used free shared buff/cache availableMem: 1213733212807968875008420268198152810110136Swap: 616038006160380解释:Mem:内存的使⽤情况总览表(物理内存)Swap:虚拟内存。

即可以把数据存放在硬盘上的数据shared:共享内存,即和普通⽤户共享的物理内存值buffers:⽤于存放要输出到disk(块设备)的数据的cached:存放从disk上读出的数据total:机器总的物理内存used:⽤掉的内存free:空闲的物理内存注:物理内存(total)=系统看到的⽤掉的内存(used)+系统看到空闲的内存(free)2、查看某个pid的物理内存使⽤情况# cat /proc/PID/status | grep VmRSS[root@localhost ~]# pidof nginx2732727326[root@localhost ~]#[root@localhost ~]# cat /proc/27327/status | grep VmRSSVmRSS: 2652 kB[root@localhost ~]#[root@localhost ~]# cat /proc/27326/status | grep VmRSSVmRSS: 1264 kB[root@localhost ~]#[root@localhost ~]# pidof java1973[root@localhost ~]# cat /proc/1973/status | grep VmRSSVmRSS: 1166852 kB由上⾯可知,nginx服务进程的两个pid所占物理内存为"2652+1264=3916k"3、查看本机所有进程的内存占⽐之和# cat mem_per.sh[root@localhost ~]# cat mem_per.sh#!/bin/bashps auxw|awk '{if (NR>1){print $4}}' > /opt/mem_listawk '{MEM_PER+=$1}END{print MEM_PER}' /opt/mem_list[root@localhost ~]#[root@localhost ~]# chmod755 mem_per.sh[root@localhost ~]#[root@localhost ~]# sh mem_per.sh64.4[root@localhost ~]#脚本配置解释:ps -auxw|awk '{print $3}' 表⽰列出本机所有进程的cpu利⽤率情况,结果中第⼀⾏带"%CPU"字符ps -auxw|awk '{print $4}' 表⽰列出本机所有进程的内存利⽤率情况,结果中第⼀⾏带"%MEM"字符ps auxw|awk '{if (NR>1){print $4}} 表⽰将"ps auxw"结果中的第⼀⾏过滤(NR>1)掉,然后打印第4⾏⼆、查看CPU使⽤情况1、toptop后键⼊P看⼀下谁占⽤最⼤# top -d 5周期性的查询CPU使⽤信息每5秒刷新⼀次top - 02:37:55 up 4 min, 1 user, load average: 0.02, 0.10, 0.05Tasks: 355 total, 1 running, 354 sleeping, 0 stopped, 0 zombie%Cpu(s): 3.0 us, 2.8 sy, 0.0 ni, 94.2id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st# us:表⽰⽤户空间程序的cpu使⽤率(没有通过nice调度)# sy:表⽰系统空间的cpu使⽤率,主要是内核程序。

linux c程序获取cpu使用率及内存使用情况

linux c程序获取cpu使用率及内存使用情况

想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了。

方法就是读取proc下的文件来获取了。

cpu使用率:/proc/stat ,内存使用情况:/proc/meminfo看程序:/**************************************************************** @file: statusinfo.c** @brief: 从linux系统获取cpu及内存使用情况** @version 1.0** @author 抹黑** @date 2009年3月17日****************************************************************/typedef struct PACKED //定义一个cpu occupy的结构体{char name[20]; //定义一个char类型的数组名name有20个元素unsigned int user; //定义一个无符号的int类型的userunsigned int nice; //定义一个无符号的int类型的niceunsigned int system;//定义一个无符号的int类型的systemunsigned int idle; //定义一个无符号的int类型的idle}CPU_OCCUPY;typedef struct PACKED //定义一个mem occupy的结构体{char name[20]; //定义一个char类型的数组名name有20个元素unsigned long total;char name2[20];unsigned long free;}MEM_OCCUPY;get_memoccupy (MEM_OCCUPY *mem) //对无类型get函数含有一个形参结构体类弄的指针OFILE *fd;int n;char buff[256];MEM_OCCUPY *m;m=mem;fd = fopen ("/proc/meminfo", "r");fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);sscanf (buff, "%s %u %s", m->name, &m->total, m->name2);fgets (buff, sizeof(buff), fd); //从fd文件中读取长度为buff的字符串再存到起始地址为buff这个空间里sscanf (buff, "%s %u", m->name2, &m->free, m->name2);fclose(fd); //关闭文件fd}int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n){unsigned long od, nd;unsigned long id, sd;int cpu_use = 0;od = (unsigned long) (o->user + o->nice + o->system +o->idle);//第一次(用户+优先级+系统+空闲)的时间再赋给odnd = (unsigned long) (n->user + n->nice + n->system +n->idle);//第二次(用户+优先级+系统+空闲)的时间再赋给odid = (unsigned long) (n->user - o->user); //用户第一次和第二次的时间之差再赋给id sd = (unsigned long) (n->system - o->system);//系统第一次和第二次的时间之差再赋给if((nd-od) != 0)cpu_use = (int)((sd+id)*10000)/(nd-od); //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_usedelse cpu_use = 0;//printf("cpu: %u\n",cpu_use);return cpu_use;}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);sscanf (buff, "%s %u %u %u %u", cpu_occupy->name, &cpu_occupy->user,&cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle);fclose(fd);}int main(){CPU_OCCUPY cpu_stat1;CPU_OCCUPY cpu_stat2;MEM_OCCUPY mem_stat;int cpu;//获取内存get_memoccupy ((MEM_OCCUPY *)&mem_stat);//第一次获取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);return 0;}linux下如何获取cpu的利用率"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。

Linux高级系统调优使用perf和sysstat工具

Linux高级系统调优使用perf和sysstat工具

Linux高级系统调优使用perf和sysstat工具Linux是一种开放源代码的操作系统,具有很强的可定制性和可扩展性,因此被广泛应用于服务器和高性能计算领域。

随着软硬件技术的不断进步,对Linux系统的性能优化需求也越来越高。

在这篇文章中,我们将介绍如何使用perf和sysstat工具进行Linux高级系统调优。

一、perf工具的介绍和使用perf工具是Linux上的性能分析工具,可以对系统的各种资源进行跟踪和分析,以帮助开发人员深入了解系统的运行情况。

下面我们将介绍几个常用的perf命令。

1. perf topperf top命令可以显示当前运行进程中的资源消耗最多的函数,以及它们在代码中的位置。

这对于快速定位性能瓶颈非常有用。

2. perf recordperf record命令可以跟踪指定进程或命令的系统调用和函数调用,生成一个数据文件用于后续的分析。

例如,可以使用以下命令跟踪一个名为"example"的进程的系统调用:perf record -p example3. perf reportperf report命令可以分析perf record生成的数据文件,并以报告的形式展示各种性能指标。

它可以展示函数的调用关系、执行时间、资源占用等信息,帮助我们全面理解系统的性能状况。

二、sysstat工具的介绍和使用sysstat工具是Linux上的系统状态统计工具,可以收集和分析系统的各种资源使用情况,如CPU、内存、磁盘和网络等。

下面我们将介绍几个常用的sysstat命令。

1. sarsar命令用于收集和报告系统的各种资源使用情况,可以显示CPU 的利用率、内存的使用情况、磁盘的IO等信息。

例如,可以使用以下命令显示CPU的利用率和平均负载:sar -u2. iostatiostat命令用于显示磁盘IO的情况,可以查看磁盘的读写速度、IO 等待时间等信息。

例如,可以使用以下命令显示磁盘的IO情况:iostat -d3. mpstatmpstat命令用于显示多核CPU的利用率,可以查看每个核心的平均负载、用户态和内核态的CPU时间等信息。

占用linux内存的命令

占用linux内存的命令

占用linux内存的命令占用Linux内存的命令在Linux系统中,我们经常需要了解和监控系统的内存使用情况。

掌握一些占用Linux内存的命令,可以帮助我们更好地管理和优化系统资源。

本文将介绍几个常用的命令,用于查看和分析Linux系统中占用内存的进程和资源。

1. free命令free命令用于查看系统的内存使用情况。

它可以显示系统总内存、已使用内存、空闲内存和缓冲区/缓存的内存。

使用命令free -h可以以更友好的方式显示内存信息,以G和M为单位。

2. top命令top命令是一个实时的进程监视器,可以显示系统中占用内存和CPU最多的进程。

在top命令的输出中,可以通过按下shift+m 键来按内存使用排序,以便查看最占用内存的进程。

3. ps命令ps命令用于查看系统中的进程信息。

使用命令ps aux可以显示所有进程的详细信息,包括进程的PID、占用CPU和内存的百分比等。

通过按照内存使用的百分比进行排序,可以找出占用内存较多的进程。

4. pmap命令pmap命令用于显示进程的内存映射。

使用命令pmap <PID>可以查看指定进程的内存映射情况,包括内存地址范围、权限、映射文件等信息。

通过分析pmap的输出,可以了解进程占用内存的细节。

5. smem命令smem命令可以以更友好的方式显示系统的内存使用情况。

它可以按进程或用户进行分组,并显示每个进程或用户占用的内存量。

使用命令smem -r可以按照内存使用排序,以便查看最占用内存的进程或用户。

6. top命令中的e命令在top命令的交互模式下,按下e键可以切换到按内存使用排序的模式。

此时,top命令将显示占用内存较多的进程,并按照内存使用的百分比进行排序。

7. slabtop命令slabtop命令用于查看内核中的slab分配器的统计信息。

slab分配器是Linux内核中用于分配和管理内存的机制之一。

使用命令slabtop可以显示各个slab分配器的内存使用情况,包括已分配的内存、缓存的对象数量等。

cpu使用率计算原理

cpu使用率计算原理

cpu使用率计算原理CPU使用率是指CPU在一定时间内工作的比例,通常以百分比表示。

它是衡量CPU负载的重要指标,能够反映出系统的运行状态和性能状况。

计算CPU使用率的原理是通过监控和统计CPU的空闲时间和总时间来计算得出。

要了解CPU的工作原理。

CPU是计算机的核心组件,负责执行指令和处理数据。

它由多个核心组成,每个核心都可以独立地执行指令。

在一个多核CPU中,每个核心都有自己的运算能力和缓存。

操作系统通过任务调度将任务分配给不同的核心,以提高系统的并发处理能力。

在计算CPU使用率时,需要获取两个关键信息:CPU的空闲时间和总时间。

CPU的空闲时间是指在某个时间段内,CPU处于空闲状态的时间。

而CPU的总时间是指在同一时间段内,CPU总共工作的时间,包括空闲时间和非空闲时间。

为了实时地获取CPU的空闲时间和总时间,操作系统会周期性地进行采样。

通常是以几十毫秒为一个时间片进行采样。

在每个时间片结束时,操作系统会记录下当前的CPU状态,包括空闲时间和总时间。

通过对这些采样数据的统计分析,就可以计算出CPU的使用率。

计算CPU使用率的公式如下:CPU使用率 = (1 - 空闲时间 / 总时间) * 100%然而,实际上,在不同的操作系统中,计算CPU使用率的方法可能会有所不同。

例如,Windows操作系统使用的是基于性能计数器的方法,Linux操作系统使用的是基于/proc文件系统的方法。

但无论采用哪种方法,核心的原理都是相同的。

为了更好地理解CPU使用率的计算原理,下面以Linux操作系统为例,介绍一下具体的实现方式。

在Linux系统中,CPU使用率的计算是通过读取/proc/stat文件来实现的。

该文件包含了有关CPU使用情况的统计信息。

通过读取该文件,可以获取到每个CPU核心的空闲时间和总时间。

具体的步骤如下:1. 打开/proc/stat文件,读取其中的数据。

2. 根据文件的格式,找到与CPU相关的行。

Linux命令行中的进程监控技巧htopatop和nmon命令详解

Linux命令行中的进程监控技巧htopatop和nmon命令详解

Linux命令行中的进程监控技巧htopatop和nmon命令详解Linux命令行中的进程监控技巧:htop、atop和nmon命令详解在Linux系统中,进程监控是一项重要的任务,它可以帮助我们了解系统的运行状态、资源利用情况以及解决性能瓶颈等问题。

本文将详细介绍三个常用的命令行工具:htop、atop和nmon,它们都可以用于进程监控,但在功能和用法上有些许差异。

一、htop命令htop是一个交互式的进程监控工具,提供了比top命令更加直观和友好的界面。

使用htop,我们可以轻松地查看系统中运行的进程,并实时了解它们的CPU、内存和I/O等资源的使用情况。

下面是htop命令的使用示例及相关说明:1. 安装htop命令:sudo apt-get install htop2. 运行htop命令:htop3. htop界面说明:htop的界面由多个区域组成,包括进程列表、系统摘要、进程树、CPU和内存占用情况等。

通过上下左右箭头键可以在不同区域之间切换,按F1键可以查看帮助文档。

在进程列表中,我们可以看到每个进程的PID、用户、CPU占用率、内存占用率等信息,并可以通过快捷键对进程进行操作,如杀死进程、跟踪进程等。

二、atop命令atop是另一个功能强大的进程监控工具,它可以提供比top和htop 更为详细的系统状态信息,并且支持日志记录功能。

下面是atop命令的使用示例及相关说明:1. 安装atop命令:sudo apt-get install atop2. 运行atop命令:sudo atop3. atop界面说明:atop的界面分为多个区域,包括系统摘要、进程列表、资源占用情况、磁盘IO、网络流量等。

在进程列表中,我们可以看到每个进程的PID、用户、CPU占用率、内存占用率、磁盘IO等信息,并且atop支持按字段排序和过滤功能,方便我们查找和分析进程。

同时,atop可以记录系统状态信息到日志文件中,我们可以使用atop命令读取和分析这些日志。

Linux系统查看CPU使用率、内存使用率、磁盘使用率

Linux系统查看CPU使用率、内存使用率、磁盘使用率

Linux系统查看CPU使⽤率、内存使⽤率、磁盘使⽤率1、查看CPU使⽤率
1)top 命令
top命令可以看到总体的系统运⾏状态和cpu的使⽤率。

2、查看内存使⽤率
1)top命令
查看第四⾏: KiB Mem
内存使⽤率: used/ total
2)free命令
free 命令显⽰系统使⽤和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。

共享内存将被忽略
1.命令格式:
free [参数]
2.命令参数:
-b 以Byte为单位显⽰内存使⽤情况。

-k 以KB为单位显⽰内存使⽤情况。

-m 以MB为单位显⽰内存使⽤情况。

-g 以GB为单位显⽰内存使⽤情况。

-o 不显⽰缓冲区调节列。

-s<间隔秒数> 持续观察内存使⽤状况。

-t 显⽰内存总和列。

-V 显⽰版本信息。

3、查看磁盘使⽤率
1)输⼊df命令
说明:磁盘使⽤率=(Used列数据之和)/(1k-blocks列数据之和)。

占用linux内存的命令

占用linux内存的命令

占用linux内存的命令占用Linux内存的命令在Linux系统中,我们经常需要查看和管理内存的使用情况。

了解如何使用命令来占用和释放内存是非常重要的。

本文将介绍几个常用的命令,帮助您了解如何占用Linux内存。

1. free命令free命令是一个用于查看系统内存使用情况的常用命令。

通过输入free命令,您可以查看系统当前的内存使用情况,包括总内存、已使用内存、空闲内存和缓冲区/缓存内存的使用情况。

2. top命令top命令是一个用于实时监控系统资源使用情况的命令。

通过输入top命令,您可以查看系统当前的内存使用情况,并实时更新。

在top命令的输出中,可以看到系统的总内存、已使用内存、空闲内存和缓冲区/缓存内存的使用情况,以及每个进程的内存占用情况。

3. vmstat命令vmstat命令是一个用于监控系统内存、进程、虚拟内存等信息的命令。

通过输入vmstat命令,您可以查看系统当前的内存使用情况,并实时更新。

在vmstat命令的输出中,可以看到系统的总内存、已使用内存、空闲内存和缓冲区/缓存内存的使用情况,以及每个进程的内存占用情况。

4. pmap命令pmap命令是一个用于查看进程内存映射的命令。

通过输入pmap 命令加上进程ID,您可以查看指定进程的内存映射情况。

在pmap 命令的输出中,可以看到进程的内存映射地址、权限、映射文件等信息。

5. ps命令ps命令是一个用于查看系统进程状态的命令。

通过输入ps命令,您可以查看系统当前运行的进程情况,包括进程ID、内存占用、CPU占用等信息。

在ps命令的输出中,可以根据内存占用情况排序,找出占用内存较多的进程。

6. smem命令smem命令是一个用于统计进程内存使用情况的命令。

通过输入smem命令,您可以查看系统当前运行的进程的内存使用情况,包括物理内存、共享内存、虚拟内存等信息。

在smem命令的输出中,可以根据内存使用情况排序,找出占用内存较多的进程。

Linux CPU占用率原理与精确度分析

Linux CPU占用率原理与精确度分析

Linux CPU占用率原理与精确度分析1CPU占用率计算原理1.1相关概念在Linux/Unix下,CPU利用率分为用户态、系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。

下面是几个与CPU占用率相关的概念。

⏹CPU利用率CPU的使用情况。

⏹用户时间(User time)表示CPU执行用户进程的时间,包括nices时间。

通常期望用户空间CPU越高越好。

⏹系统时间(System time)表示CPU在内核运行时间,包括IRQ和softirq时间。

系统CPU占用率高,表明系统某部分存在瓶颈。

通常值越低越好。

⏹等待时间(Waiting time)CPI在等待I/O操作完成所花费的时间。

系统部应该花费大量时间来等待I/O操作,否则就说明I/O存在瓶颈。

⏹空闲时间(Idle time)系统处于空闲期,等待进程运行。

⏹Nice时间(Nice time)系统调整进程优先级所花费的时间。

⏹硬中断处理时间(Hard Irq time)系统处理硬中断所花费的时间。

⏹软中断处理时间(SoftIrq time)系统处理软中断中断所花费的时间。

⏹丢失时间(Steal time)被强制等待(involuntary wait)虚拟CPU的时间,此时hypervisor在为另一个虚拟处理器服务。

下面是我们在top命令看到的CPU占用率信息及各项值含义。

Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.2%id, 0.5%wa, 0.0%hi, 0.0%si, 0.0%stus: User timesy: System timeni: Nice timeid: Idle timewa: Waiting timehi: Hard Irq timesi: SoftIrq timest: Steal time1.2CPU占用率计算Linux CPU占用率计算,都是根据/proc/stat文件内容计算而来,下面是stat 文件内容样例,内核版本不同,会稍有不同,但内容基本一致。

linux下如何看每个CPU的使用率

linux下如何看每个CPU的使用率

linux下如何看每个CPU的使用率CPU作为电脑的核心组成部份,它的好坏直接影响到电脑的性能。

下面是小编带来的关于统计多个CPU利用率的内容,欢迎阅读!统计多个CPU利用率:一.问题的来源MySQL在Linux下是多线程的,而且只能将多个线程分布到一个CPU上。

所以,企业中,使用小型服务器,或者PC SERVER,多个CPU利用率并不高。

基本上有1~2个在使用。

本文主要为了统计CPU的利用率。

希望引起大家注意。

二.程序实现1.输入top -bn1 (b控制输出格式为文本格式,非交互格式)[mysql@longxibendi.host]$ top -bn12.输入top ,进入交互模式,为下一步设置输出格式做准备[mysql@longxibendi.host]$ top然后输入1就可以看到多个CPU利用率了top - 21:40:51 up 25 days, 9:32, 1 user, load average: 0.15, 0.30, 0.33T asks: 101 total, 1 running, 96 sleeping, 0 stopped, 4 zombieCpu0 : 0.8% us, 0.3% sy, 0.0% ni, 98.4% id, 0.3% wa, 0.0% hi, 0.0% siCpu1 : 1.1% us, 0.2% sy, 0.0% ni, 98.6% id, 0.1% wa, 0.0% hi, 0.0% siCpu2 : 0.5% us, 0.1% sy, 0.0% ni, 99.4% id, 0.0% wa, 0.0% hi, 0.0% siCpu3 : 0.4% us, 0.1% sy, 0.0% ni, 99.5% id, 0.0% wa, 0.0% hi, 0.0% siCpu4 : 0.3% us, 0.1% sy, 0.0% ni, 99.5% id, 0.0% wa, 0.0% hi, 0.0% siCpu5 : 0.3% us, 0.1% sy, 0.0% ni, 99.6% id, 0.0% wa, 0.0% hi, 0.0% siCpu6 : 0.3% us, 0.1% sy, 0.0% ni, 99.6% id, 0.0% wa, 0.0% hi, 0.0% siCpu7 : 0.2% us, 0.1% sy, 0.0% ni, 99.7% id, 0.0% wa, 0.0% hi, 0.0% si3.保存当前输出格式的参数(配置输出)在2的基础上按W ,然后按ctri+c保存退出按q(这样就会在/home/mysql 下有.toprc文件) 4.编写shell 程序cpu.sh#!/bin/bashwhile truedotop -bcisSn1 &gt;&gt;cpu.logsleep 10done5.部署cpu.sh 程序sh cpu.sh &amp;三.分析日志cat cpu.log| grep cpu 等操作,就可以分析过去时间,各个cpu的利用率了。

nmon查看cpu使用率的方法

nmon查看cpu使用率的方法

nmon查看cpu使用率的方法在做Linux系统优化的时候,物理内存是其中最重要的一方面。

自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况。

下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法。

1./proc/meminfo查看RAM使用情况最简单的方法是通过/proc/meminfo。

这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。

/proc/meminfo列出了所有你想了解的内存的使用情况。

进程的内存使用信息也可以通过/proc//statm 和/proc//status 来查看。

$ cat /proc/meminfo2.atopatop命令是一个终端环境的监控命令。

它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注。

$ sudo atop3.freefree命令是一个快速查看内存使用情况的方法,它是对/proc/meminfo 收集到的信息的一个概述。

$ free -h4.GNOME System MonitorGNOME System Monitor 是一个显示最近一段时间内的CPU、内存、交换区及网络的使用情况的视图工具。

它还提供了一种查看CPU及内存使用情况的方法。

$ gnome-system-monitor5.htophtop命令显示了每个进程的内存实时使用率。

它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。

列表可以水平及垂直滚动。

$ htop6.KDE System Monitor功能同 4 中介绍的GENOME版本。

$ ksysguard7.memstatmemstat是一个有效识别executable(s), process(es) and shared libraries使用虚拟内存情况的命令。

Linux系统查看CPU使用率的几个命令(补充)

Linux系统查看CPU使用率的几个命令(补充)

Linux系统查看CPU使⽤率的⼏个命令(补充)在linux的系统维护中,可能需要经常查看cpu使⽤率,分析系统整体的运⾏情况。

⽽监控CPU的性能⼀般包括以下3点:运⾏队列、CPU使⽤率和上下⽂切换。

对于每⼀个CPU来说运⾏队列最好不要超过3,例如,如果是双核CPU就不要超过6。

如果队列长期保持在3以上,说明任何⼀个进程运⾏时都不能马上得到cpu的响应,这时可能需要考虑升级cpu。

另外满负荷运⾏cpu的使⽤率最好是user空间保持在65%~70%,system空间保持在30%,空闲保持在0%~5% 。

下⾯总结下查看CPU使⽤率常⽤的⼏个命令。

1、top这个命令很常⽤,在第三⾏有显⽰CPU当前的使⽤情况。

[root@li676-235 ~]# top -bn 1 -i -ctop - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombieCpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%stMem: 1014660k total, 880512k used, 134148k free, 264904k buffersSwap: 262140k total, 34788k used, 227352k free, 217144k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND12760 root 20 0 15084 1944 1632 R 2.0 0.2 0:00.01 top -bn 1 -i -croot@li676-235 ~]# top -bn 1 -i -ctop - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombieCpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%stMem: 1014660k total, 880512k used, 134148k free, 264904k buffersSwap: 262140k total, 34788k used, 227352k free, 217144k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND12760 root 20 0 15084 1944 1632 R 2.0 0.2 0:00.01 top -bn 1 -i -c如上所⽰,top命令可以看到总体的系统运⾏状态和cpu的使⽤率。

服务器监控指标解读CPU利用率、内存使用率等详解

服务器监控指标解读CPU利用率、内存使用率等详解

服务器监控指标解读CPU利用率、内存使用率等详解在服务器运行过程中,监控服务器的性能指标是非常重要的,其中CPU利用率和内存使用率是两个最为关键的指标。

通过监控这些指标,管理员可以及时了解服务器的运行状态,发现问题并进行相应的优化和调整,以确保服务器的稳定性和性能。

本文将详细解读CPU利用率、内存使用率等监控指标,帮助管理员更好地理解和应用这些指标。

一、CPU利用率CPU利用率是指CPU在单位时间内被使用的比例,通常以百分比表示。

在服务器监控中,CPU利用率是一个非常重要的性能指标,它反映了服务器CPU的负载情况。

当CPU利用率过高时,表示CPU正在承担较大的工作负荷,可能会导致服务器性能下降甚至系统崩溃。

因此,管理员需要密切关注CPU利用率,及时发现并解决CPU负载过高的问题。

1.1 CPU利用率的计算方法CPU利用率的计算方法通常是通过监控工具实时采集CPU的运行状态数据,并根据这些数据计算得出。

一般来说,CPU利用率的计算公式如下:CPU利用率 = (CPU总时间 - CPU空闲时间) / CPU总时间 * 100%其中,CPU总时间表示CPU运行的总时间,CPU空闲时间表示CPU处于空闲状态的时间。

通过这个公式,可以得出CPU的利用率。

1.2 CPU利用率的监控工具在实际监控中,管理员可以使用各种监控工具来监控服务器的CPU 利用率,常用的监控工具包括Zabbix、Nagios、Cacti等。

这些监控工具可以实时采集服务器的性能数据,并以图表的形式展示出来,帮助管理员直观地了解服务器的运行状态。

1.3 CPU利用率的优化方法为了降低CPU利用率,提升服务器性能,管理员可以采取一些优化方法,例如:- 优化代码:对服务器上运行的程序进行优化,减少不必要的计算和资源消耗,降低CPU的负载。

- 增加CPU核心数:如果服务器的CPU核心数较少,可以考虑升级CPU 或增加CPU核心数,以提升服务器的计算能力。

linux 获取cpu利用率的函数

linux 获取cpu利用率的函数

linux 获取cpu利用率的函数摘要:1.Linux中获取CPU利用率的方法2.CPU利用率计算公式和步骤3.具体操作示例正文:在Linux系统中,获取CPU利用率的方法主要有两种:一种是通过/proc 文件系统获取,另一种是通过SNMP服务获取。

首先,我们来看通过/proc文件系统获取CPU利用率的方法。

在Linux系统中,/proc文件系统是一个虚拟的文件系统,它提供了关于系统中各个进程和系统资源的信息。

其中,我们可以通过查看/proc/stat文件来获取CPU的使用情况。

具体的查看方法如下:```bashcat /proc/stat```这个命令会显示CPU的使用情况,包括用户的模式(user)、低优先级的用户模式(nice)、系统内核模式(system)以及系统空闲的处理器时间(idle)。

通过这些信息,我们可以计算出CPU的利用率。

CPU利用率的计算公式如下:CPU利用率= (用户模式+ 系统模式+ 低优先级用户模式)/ 处理器核数* 100%接下来,我们来看如何通过SNMP服务获取CPU利用率。

SNMP (Simple Network Management Protocol)是一种用于管理和监控网络设备的协议。

在Linux系统中,我们可以安装SNMP服务,并通过HOST-RESOURCES-MIB库中的节点获取CPU利用率等信息。

具体的操作步骤如下:1.在Linux虚拟机上安装SNMP服务。

2.通过SNMP库中的hrProcessorLoad节点获取CPU负载值。

3.根据获取到的CPU负载值,计算CPU利用率。

CPU利用率的计算公式如下:CPU利用率= (CPU负载值之和/ 处理器的个数)* 100%以上就是如何在Linux系统中获取CPU利用率的方法和具体的操作步骤。

服务器资源利用率计算公式

服务器资源利用率计算公式

服务器资源利用率计算公式
服务器资源利用率可以通过不同的指标来计算,以下是常见的计算公式:
1. CPU利用率计算公式:
CPU利用率可以通过以下公式来计算:
CPU利用率 = (总CPU时间空闲CPU时间) / 总CPU时间100%。

在这个公式中,总CPU时间是指在特定时间段内CPU的总运行时间,空闲CPU时间是指CPU在该时间段内空闲的时间。

2. 内存利用率计算公式:
内存利用率可以通过以下公式来计算:
内存利用率 = (总内存可用内存) / 总内存 100%。

在这个公式中,总内存是指服务器总的内存大小,可用内存
是指在特定时间段内未被使用的内存大小。

3. 磁盘利用率计算公式:
磁盘利用率可以通过以下公式来计算:
磁盘利用率 = (总磁盘空间可用磁盘空间) / 总磁盘空间100%。

在这个公式中,总磁盘空间是指磁盘的总容量,可用磁盘空
间是指在特定时间段内未被使用的磁盘空间大小。

4. 网络带宽利用率计算公式:
网络带宽利用率可以通过以下公式来计算:
网络带宽利用率 = (实际使用带宽 / 网络带宽上限) 100%。

在这个公式中,实际使用带宽是指在特定时间段内实际使用
的带宽大小,网络带宽上限是指网络的最大带宽容量。

以上是常见的服务器资源利用率计算公式,通过这些公式可以
全面地了解服务器资源的利用情况,从而进行资源优化和性能调优。

cpu占用率计算原理

cpu占用率计算原理

cpu占用率计算原理【原创实用版5篇】篇1 目录一、CPU 占用率计算原理概述二、CPU 占用率计算方法详解1.读取/proc/pid/stat文件2.读取/proc/stat文件3.计算进程 CPU 占用率三、CPU 利用率计算的实际应用1.系统优化2.任务调度3.性能监控四、总结篇1正文一、CPU 占用率计算原理概述在 Linux 系统中,CPU 占用率是指 CPU 在一定时间内执行任务所占用的时间与总时间的比值。

CPU 占用率高意味着 CPU 正处于繁忙状态,而 CPU 占用率低则表示 CPU 相对空闲。

了解 CPU 占用率的计算原理对于系统优化、任务调度和性能监控具有重要意义。

二、CPU 占用率计算方法详解计算 CPU 占用率的方法主要有两种:1.读取/proc/pid/stat文件/proc/pid/stat文件记录了一个进程从启动到现在所占用的CPU时间。

通过读取该文件,可以获取进程的CPU占用情况。

2.读取/proc/stat文件/proc/stat文件记录了系统从启动到现在所占用的CPU时间。

通过读取该文件,可以了解系统的整体CPU占用情况。

3.计算进程 CPU 占用率取两个时间点,这两个时间点的进程耗时差,除以系统耗时差,得到的就是该进程的 CPU 占用率。

三、CPU 利用率计算的实际应用1.系统优化通过监控 CPU 占用率,可以发现系统中的性能瓶颈,进而对系统进行优化。

例如,可以通过调整进程的优先级、动态调整 CPU 核心数和缓存大小等方法,提高系统的运行效率。

2.任务调度在任务调度方面,可以根据进程的 CPU 占用率来调整任务的执行顺序。

对于 CPU 占用率高的进程,可以优先执行;而对于 CPU 占用率低的进程,可以暂时挂起,等待 CPU 资源充足时再执行。

3.性能监控通过对 CPU 占用率的实时监控,可以了解系统的运行状况,及时发现并处理潜在问题。

例如,当 CPU 占用率持续处于高位时,可能是由于系统受到了恶意攻击或病毒感染,需要立即采取措施进行处理。

linux-c程序获取cpu使用率及内存使用情况

linux-c程序获取cpu使用率及内存使用情况

想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了。

方法就是读取proc下的文件来获取了。

cpu使用率:/proc/stat ,内存使用情况:/proc/meminfo看程序:/**************************************************************** @file: statusinfo.c** @brief: 从linux系统获取cpu及内存使用情况** @version 1.0** @author 抹黑** @date 2009年3月17日****************************************************************/typedef struct PACKED //定义一个cpu occupy的结构体{char name[20]; //定义一个char类型的数组名name有20个元素unsigned int user; //定义一个无符号的int类型的userunsigned int nice; //定义一个无符号的int类型的niceunsigned int system;//定义一个无符号的int类型的systemunsigned int idle; //定义一个无符号的int类型的idle}CPU_OCCUPY;typedef struct PACKED //定义一个mem occupy的结构体{char name[20]; //定义一个char类型的数组名name有20个元素unsigned long total;char name2[20];unsigned long free;}MEM_OCCUPY;get_memoccupy (MEM_OCCUPY *mem) //对无类型get函数含有一个形参结构体类弄的指针OFILE *fd;int n;char buff[256];MEM_OCCUPY *m;m=mem;fd = fopen ("/proc/meminfo", "r");fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);fgets (buff, sizeof(buff), fd);sscanf (buff, "%s %u %s", m->name, &m->total, m->name2);fgets (buff, sizeof(buff), fd); //从fd文件中读取长度为buff的字符串再存到起始地址为buff这个空间里sscanf (buff, "%s %u", m->name2, &m->free, m->name2);fclose(fd); //关闭文件fd}int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n){unsigned long od, nd;unsigned long id, sd;int cpu_use = 0;od = (unsigned long) (o->user + o->nice + o->system +o->idle);//第一次(用户+优先级+系统+空闲)的时间再赋给odnd = (unsigned long) (n->user + n->nice + n->system +n->idle);//第二次(用户+优先级+系统+空闲)的时间再赋给odid = (unsigned long) (n->user - o->user); //用户第一次和第二次的时间之差再赋给id sd = (unsigned long) (n->system - o->system);//系统第一次和第二次的时间之差再赋给if((nd-od) != 0)cpu_use = (int)((sd+id)*10000)/(nd-od); //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_usedelse cpu_use = 0;//printf("cpu: %u\n",cpu_use);return cpu_use;}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);sscanf (buff, "%s %u %u %u %u", cpu_occupy->name, &cpu_occupy->user,&cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle);fclose(fd);}int main(){CPU_OCCUPY cpu_stat1;CPU_OCCUPY cpu_stat2;MEM_OCCUPY mem_stat;int cpu;//获取内存get_memoccupy ((MEM_OCCUPY *)&mem_stat);//第一次获取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);return 0;}linux下如何获取cpu的利用率"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。

linux内存使用率计算公式

linux内存使用率计算公式

linux内存使用率计算公式
Linux内存使用率的计算公式如下:
总内存使用率= (已使用的内存/ 总内存)* 100%
其中,已使用的内存包括已用内存和缓存/缓冲区内存。

已用内存是指当前被进程使用的内存,包括正在运行的程序和其它系统进程所占用的内存。

缓存/缓冲区内存是指操作系统为了优化磁盘IO而暂时存储的数据。

当需要更多内存时,这部分内存可以被释放,给应用程序或系统进程使用。

总内存是指系统中总共可用的内存大小。

通过计算已使用的内存与总内存的比例,可以得到内存使用率的百分比。

Linux中查看系统资源占用情况的命令

Linux中查看系统资源占用情况的命令

Linux中查看系统资源占⽤情况的命令top:主要参数d:指定更新的间隔,以秒计算。

q:没有任何延迟的更新。

如果使⽤者有超级⽤户,则top命令将会以最⾼的优先序执⾏。

c:显⽰进程完整的路径与名称。

S:累积模式,会将⼰完成或消失的⼦⾏程的CPU时间累积起来。

s:安全模式。

i:不显⽰任何闲置(Idle)或⽆⽤(Zombie)的⾏程。

n:显⽰更新的次数,完成后将会退出to显⽰参数:PID(Process ID):进程标⽰号。

USER:进程所有者的⽤户名。

PR:进程的优先级别。

NI:进程的优先级别数值。

VIRT:进程占⽤的虚拟内存值。

RES:进程占⽤的物理内存值。

SHR:进程使⽤的共享内存值。

S:进程的状态,其中S表⽰休眠,R表⽰正在运⾏,Z表⽰僵死状态,N表⽰该进程优先值是负数。

%CPU:该进程占⽤的CPU使⽤率。

%MEM:该进程占⽤的物理内存和总内存的百分⽐。

TIME+:该进程启动后占⽤的总的CPU时间。

Command:进程启动的启动命令名称,如果这⼀⾏显⽰不下,进程会有⼀个完整的命令⾏。

top命令使⽤过程中,还可以使⽤⼀些交互的命令来完成其它参数的功能。

这些命令是通过快捷键启动的。

<空格>:⽴刻刷新。

P:根据CPU使⽤⼤⼩进⾏排序。

T:根据时间、累计时间排序。

q:退出top命令。

m:切换显⽰内存信息。

t:切换显⽰进程和CPU状态信息。

c:切换显⽰命令名称和完整命令⾏。

M:根据使⽤内存⼤⼩进⾏排序。

W:将当前设置写⼊~/.toprc⽂件中。

这是写top配置⽂件的推荐⽅法。

free1.作⽤free命令⽤来显⽰内存的使⽤情况,使⽤权限是所有⽤户。

2.格式free [-b-k-m] [-o] [-s delay] [-t] [-V]3.主要参数-b -k -m:分别以字节(KB、MB)为单位显⽰内存使⽤情况。

-s delay:显⽰每隔多少秒数来显⽰⼀次内存使⽤情况。

-t:显⽰内存总和列。

-o:不显⽰缓冲区调节列。

linux top 计算进程 cpu 使用率的原理

linux top 计算进程 cpu 使用率的原理

linux top 计算进程cpu 使用率的原理
Linux中的top命令用于显示系统的实时性能信息,包括CPU的使用率。

top命令计算进程CPU使用率的原理主要基于两个指标:累计运行时间和累计用户时间。

top命令每隔一定时间(默认1秒)更新一次进程的CPU使用情况。

在更新时,top命令会计算每个进程的累计运行时间和累计用户时间。

累计运行时间表示进程自启动以来所经过的时间,而累计用户时间表示进程在CPU上执行的时间。

CPU使用率的计算公式如下:
CPU使用率= 累计用户时间/ 累计运行时间* 100%
需要注意的是,top命令显示的CPU使用率可能超过100%。

这是因为在多核CPU环境下,一个进程可以同时使用多个CPU核心,因此它的CPU使用率可能会超过100%。

在这种情况下,CPU使用率超过100%表示该进程在所有核心上的总运行时间超过了系统总运行时间。

此外,在top命令中,CPU使用率是根据上次更新以来的时间来计算的。

因此,在短时间内,进程的CPU使用率可能会出现较大的波动。

总之,Linux top命令计算进程CPU使用率的原理是根据进程的累计用户时间和累计运行时间来计算的,用以反映进程在CPU上的使用情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本原理1)系统CPU使用率等于两个时间点的CPU非空闲时间差除以CPU时间总量差得到的百分比,这两者可从/proc/stat文件获得。

2)系统内存使用率等于系统物理内存消耗量除以系统物理内存总量(memtotal,以KB为单位)得到的百分比,这两者可从/proc/meminfo文件获得。

3)进程CPU使用率等于进程CPU时间(pct,以jiffies为单位)除以进程运行时间(pt)得到的百分比,pct从/proc/pid/stat文件读取utime和stime字段相加即得,pt等于系统运行时间(st,以秒为单位)减去进程启动时间(pst,以jiffies为单位),st从/proc/uptime文件获得,pst从/proc/pid/stat文件读取starttime字段获得。

4)进程内存使用率等于进程驻留集大小(rss)除以系统物理内存总量(memtotal,以KB为单位)得到的百分比,rss从/proc/pid/stat读取rss字段得到,以页数为单位。

代码实现1)基本结构和接口定义在proc_stat.h头文件内,如下所示1struct sys_cpu_time2{3unsigned long long user,old_user;4unsigned long long nice,old_nice;5unsigned long long sys,old_sys;6 unsigned long long idle,old_idle;7unsigned long long wait,old_wait;8unsigned long long hirq,old_hirq;9unsigned long long sirq,old_sirq;10};1112struct sys_uptime13{14double uptime;15double idle;16};1718struct sys_mem_info19{20unsigned long main_total;21unsigned long main_free;22unsigned long main_used;23unsigned long main_buffers;24unsigned long main_cached;25unsigned long swap_total;26unsigned long swap_free;27unsigned long swap_used;28unsigned long swap_cached;29};3031struct system_stat32{33sys_cpu_time ct;34sys_mem_info mi;35sys_uptime ut;36};3738struct process_stat39{40char name[16];41char state;42int ppid;43 int pgrp;44int session;45int tty_nr;46int tpgid;47unsigned int flags;48unsigned long minflt;49unsigned long cminflt;50unsigned long majflt;51unsigned long cmajflt;52unsigned long utime;53unsigned long stime;54long cutime;55long cstime;56long priority;57long nice;58 long threads;59long iterealvalue;60unsigned long long starttime;61unsigned long vsize;62long rss;63};6465struct sys_mem_entry66{67const char *name;68unsigned long *val;69} ;7071 static const int PROC_STAT = 0x0001;72static const int PROC_MEM = 0x0002;73static const int PROC_UPTIME = 0x0004;74static const int PROC_ALL = PROC_STAT|PROC_MEM|PROC_UPTIME;7576bool get_system_stat(system_stat& ss,int flag);7778bool get_system_usage(float& cpu,float& mem);7980bool get_process_stat(pid_t id,process_stat& ps);8182bool get_process_usage(pid_t id,float& cpu,float& mem,unsigned long long& uptime);以上sys_cpu_time、sys_mem_info和process_stat结构只是从对应文件中选取了用于计算CPU和内存使用率必须的部分字段,如果需求扩展,可以在其后添加更多的字段;sys_mem_info中的main_used和swap_used 是引申字段,它们并不对应于/proc/meminfo文件。

2)实现在proc_stat.cpp文件内,如下所示1static const char* PROC_FILE_STAT = "/proc/stat";2static const char* PROC_FILE_MEMINFO = "/proc/meminfo";3static const char* PROC_FILE_UPTIME = "/proc/uptime";45static int compare_sys_mem_entry(const void *a, const void *b)6{7return strcmp(static_cast<const sys_mem_entry*>(a)->name,static_cast<const sys_mem_entry*>(b)->name);8}910inline ssize_t file2str(const char* file,char* buf,size_t len,int* pfd=NULL)11{12int fd = -1;13if(pfd) fd = *pfd;1415if(-1 == fd){16fd=open(file,O_RDONLY,0);17if(-1==fd) return -1;18if(pfd) *pfd = fd;19}else20lseek(fd,0,SEEK_SET);2122ssize_t ret = read(fd,buf,len-1);23if(NULL==pfd) close(fd);24if(ret <= 0) return -1;25buf[ret] = '\0';2627return ret;28}2930bool get_system_stat(system_stat& ss,int flag)31{32assert(flag&PROC_ALL);3334char buf[2048];35ssize_t ret;3637if(flag & PROC_STAT){38static __thread int stat_id = -1;39ret = file2str(PROC_FILE_STAT,buf,sizeof(buf),&stat_id);40if (-1==ret) return false;41sys_cpu_time* ct = &ss.ct;42if(7!=sscanf(buf,"cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",&ct->user,&ct->nice,&ct->sys,&ct->idle, 43&ct->wait,&ct->hirq,&ct->sirq))44return false;45}4647if(flag & PROC_UPTIME){48static __thread int uptime_id = -1;49ret = file2str(PROC_FILE_UPTIME,buf,sizeof(buf),&uptime_id);50if(-1==ret) return false;51sys_uptime* ut = &ss.ut;52if(2!=sscanf(buf,"%lf %lf",&ut->uptime,&ut->idle))53return false;54}5556if(flag & PROC_MEM){57static __thread int mem_id = -1;58ret = file2str(PROC_FILE_MEMINFO,buf,sizeof(buf),&mem_id);59if(-1==ret) return false;6061sys_mem_info *mi = &ss.mi;62const sys_mem_entry mem_table[] = {63{"Buffers", &mi->main_buffers},64{"Cached", &mi->main_cached},65{"MemFree", &mi->main_free},66{"MemTotal", &mi->main_total},67{"SwapCached", &mi->swap_cached},68{"SwapFree", &mi->swap_free},69{"SwapTotal", &mi->swap_total}70};7172char *beg,*end = buf + ret;73char *colon,*lf;74sys_mem_entry key,*sme;7576for(beg=buf;beg<end;beg=lf+1){77colon = strchr(beg,':');78if(!colon) break;79*colon++ = '\0';80lf = strchr(colon,'\n');81if(!lf) break; = beg;83sme = (sys_mem_entry*)bsearch(&key,mem_table,NUM_ELEMENTS(mem_table),sizeof(sys_mem_entry),compare_s ys_mem_entry);84if(sme) *(sme->val) = ::strtoul(beg=colon,&colon,10);85}86mi->main_used = mi->main_total - mi->main_free;87mi->swap_used = mi->swap_total - mi->swap_free;88}8990return true;91}9293bool get_system_usage(float& cpu,float& mem)94{95static __thread system_stat ss = {0};96if(!get_system_stat(ss,PROC_MEM|PROC_STAT))97return false;9899sys_cpu_time* ct = &ss.ct;100long long user,nice,sys,idle,wait,hirq,sirq,sum;101user = ct->user - ct->old_user;102nice = ct->nice - ct->old_nice;103sys = ct->sys - ct->old_sys;104idle = ct->idle - ct->old_idle;105if(idle<0) idle = 0;106wait = ct->wait - ct->old_wait;107hirq = ct->hirq - ct->old_hirq;108sirq = ct->sirq - ct->old_sirq;109ct->old_user = ct->user;110ct->old_nice = ct->nice;111ct->old_sys = ct->sys;112ct->old_idle = ct->idle;113ct->old_wait = ct->wait;114ct->old_hirq = ct->hirq;115ct->old_sirq = ct->sirq;116117sum = user + nice + sys + idle + wait + hirq + sirq; 118if(sum<1) sum = 1;119cpu = 100.0*(sum - idle)/sum;120121sys_mem_info* mi = &ss.mi;122mem = 100.0*mi->main_used/mi->main_total;123124return true;125}126127bool get_process_stat(pid_t id,process_stat& ps)128{129char buf[1024],name[64];130131sprintf(name,"/proc/%u/stat",id);132ssize_t ret = file2str(name,buf,sizeof(buf));133if(-1==ret) return false;134135char* beg = strchr(buf,'(');136if(!beg) return false;137138char* end = strchr(++beg,')');139if(!end) return false;140141size_t num = end - beg;142if(num >= sizeof(name))143num = sizeof(name) -1;144memcpy(,beg,num);[num] = '\0';146147return 22/*1+5+1+6+6+1+1+1*/ == sscanf(end+2,148"%c "149"%d %d %d %d %d "150"%u "151"%lu %lu %lu %lu %lu %lu "152"%ld %ld %ld %ld %ld %ld "153"%Lu "154"%lu "155"%ld",156&ps.state, //1157&ps.ppid,&ps.pgrp,&ps.session,&ps.tty_nr,&ps.tpgid, //5158&ps.flags,//1159&ps.minflt,&ps.cminflt,&ps.majflt,&ps.cmajflt,&ps.utime,&ps.stime,//6160&ps.cutime,&ps.cstime,&ps.priority,&ps.nice,&ps.threads,&ps.iterealvalue, //6 161&ps.starttime,//1162&ps.vsize,//1163&ps.rss); //1164}165166bool get_process_usage(pid_t id,float& cpu,float& mem,unsigned long long& uptime)167{168system_stat ss;169if(!get_system_stat(ss,PROC_MEM|PROC_UPTIME))170return false;171172process_stat ps;173if(!get_process_stat(id,ps))174return false;175176long HZ = sysconf(_SC_CLK_TCK);177unsigned long long pct = ps.utime+ps.stime;178uptime = (unsigned long long)ss.ut.uptime - ps.starttime/HZ;179cpu = uptime ? (100.0*pct/HZ)/uptime : 0.0;180181long page_size = sysconf(_SC_PAGESIZE) >> 10;182mem = 100.0*ps.rss*page_size/ss.mi.main_total;183184return true;185}以上get_system_stat接口的实现中,sys_mem_entry数组mem_table中的元素对应于sys_mem_info 中的字段,并按其名称升序排列,便于二分查找。

相关文档
最新文档