如何实时显示cpu和手机cpu内存使用情况况

Linux下获得CPU利用率和内存使用情况(C实现)_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Linux下获得CPU利用率和内存使用情况(C实现)
来源:Linux社区&
作者:Linux
在Linux中如果要监视一个进程的运行情况,如查看它的CPU使用效率和内存使用情况,就需要从系统的/proc目录的读取一些系统信息。然后分析得到结果,特别是在嵌入式中的应用程序这个功能就很重要。本文中的代码是从top命令的源代码分析中获得,并做了部分修改,在FC6+GCC4.1调试通过。从这个工程中我也获得一些感悟。
1. Linux系统很优雅,如果在Windows中做这个功能就需要调用ActiveX控件。而在Linux中只需要读取文本。
2.想完成什么功能,如果不知道怎么做,就想有没有没有其它的软件有这个功能,如果有,查看它的源代码就可以了,然后定制自己需要的功能。
3.多想多看多做,学习技术的不二法门。
------------------------------------------分割线------------------------------------------
免费下载地址在
用户名与密码都是
具体下载目录在 /2014年资料/10月/9日/Linux下获得CPU利用率和内存使用情况(C实现)
下载方法见
------------------------------------------分割线------------------------------------------
下面是获得系统CPU和内存情况的代码:
void get_system_info(info)& &
struct& system_info& *{& &
char& buffer[ 4096 + 1 ];& &
int& fd,& &
/*& get load averages& */ & & {& & fd& =& open( " loadavg " , O_RDONLY);& & len& =& read(fd, buffer,& sizeof (buffer) - 1 );& & close(fd);& & buffer[len]& =&
& & info -& load_avg[ 0 ]& =& strtod(buffer,& & p);& & info -& load_avg[ 1 ]& =& strtod(p,& & p);& & info -& load_avg[ 2 ]& =& strtod(p,& & p);& & p& =& skip_token(p);& & & & & &
/*& skip running/tasks& */ & & p& =& skip_ws(p);& &
if& ( * p)& & & & info -& last_pid& =& atoi(p);& &
else & & & & info -& last_pid& =&
- 1 ;& & }
/*& get the cpu time info& */ & & {& & fd& =& open( " stat " , O_RDONLY);& & len& =& read(fd, buffer,& sizeof (buffer) - 1 );& & close(fd);& & buffer[len]& =&
& & p& =& skip_token(buffer);& & & & & &
/*& "cpu"& */ & & cp_time[ 0 ]& =& strtoul(p,& & p,& 0 );& & & & cp_time[ 1 ]& =& strtoul(p,& & p,& 0 );& & cp_time[ 2 ]& =& strtoul(p,& & p,& 0 );& & cp_time[ 3 ]& =& strtoul(p,& & p,& 0 );
/*& convert cp_time counts to percentages& */ & & percentages( 4 , cpu_states, cp_time, cp_old, cp_diff);& & }& & & &
/*& get system wide memory usage& */ & & {& &
& & fd& =& open( " meminfo " , O_RDONLY);& & len& =& read(fd, buffer,& sizeof (buffer) - 1 );& & close(fd);& & buffer[len]& =&
/*& be prepared for extra columns to appear be seeking& & &
to ends of lines& */ & & & & p& =&& & p& =& skip_token(p);& & memory_stats[ 0 ]& =& strtoul(p,& & p,& 10 );& /*& total memory& */ & & & & p& =& strchr(p,& ' \n ' );& & p& =& skip_token(p);& & memory_stats[ 1 ]& =& strtoul(p,& & p,& 10 );& /*& free memory& */ & & & & & & p& =& strchr(p,& ' \n ' );& & p& =& skip_token(p);& & memory_stats[ 2 ]& =& strtoul(p,& & p,& 10 );& /*& buffer memory& */ & & & & p& =& strchr(p,& ' \n ' );& & p& =& skip_token(p);& & memory_stats[ 3 ]& =& strtoul(p,& & p,& 10 );& /*& cached memory& */ & & & &
for (i& =&
8& ;i ++ ) {& & & & p ++ ;& & & & p& =& strchr(p,& ' \n ' );& & }& & & & p& =& skip_token(p);& & memory_stats[ 4 ]& =& strtoul(p,& & p,& 10 );& /*& total swap& */ & & & & p& =& strchr(p,& ' \n ' );& & p& =& skip_token(p);& & memory_stats[ 5 ]& =& strtoul(p,& & p,& 10 );& /*& free swap& */ & & & & }
/*& set arrays and strings& */ & & info -& cpustates& =& cpu_& & info -& memory& =& memory_}
相关资讯 & & &
& (08月22日)
& (03月05日)
& (05月08日)
& (02月09日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款当前位置>>>
我想大家都知道如何查如何查看硬盘使用情况,却不知道查看电脑内存和CPU的使用情况。今天小编就教大家一个方法,让大家随时了解到内存、CPU的占用情况使用情况。内存和CPU,是衡量电脑的性能高低的主要部件,如果你的CPU和内存不够大,那么,当电脑运行多个应用程序时,就会慢甚至很卡。如果想知道电脑运行过程时,究竟占用了多少的CPU和内存资源,可以使用以下的方法查看:1.点击任务栏右键选择“任务管理器“;2.在【性能】选项卡下你可以看到你的电脑实时CPU和内存使用了多少,如果你的CPU和内存经常工作在90%以上的话,那么你的电脑就会显得很慢了。如果跳到100%的话,那你的电脑就会卡死了。 & & & & &3.还可以通过任务管理器的【进程】选项卡查看哪一个程序占用CPU或内存大的,点击其右键选择【结束进程,前提条件是该进程是一般的软件程序,如果是系统核心程序是结束不了的。另外,在该栏的最后一行有一个“system idle process”进程,该进程为空闲进程,它的值越大,代表电脑CPU与内存占用情况不大。
少侠请留名linux下实现CPU使用率和内存使用率获取方法
想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了。
&方法就是读取proc下的文件来获取了。
cpu使用率:&&&
/proc/stat
,内存使用情况:&&&&&
/proc/meminfo
&看程序 :
&typedef struct
PACKED&&&&&&&&
//定义一个cpu occupy的结构体
name[20];&&&&&
//定义一个char类型的数组名name有20个元素
& //定义一个无符号的int类型的user
& //定义一个无符号的int类型的nice
&//定义一个无符号的int类型的system
& //定义一个无符号的int类型的idle
&}CPU_OCCUPY;
typedef struct
PACKED&&&&&&&&
//定义一个mem occupy的结构体
name[20];&&&&&
//定义一个char类型的数组名name有20个元素
&char name2[20];
&unsigned long
&&&&&&&&&&&&&&&&&&&&&&
&}MEM_OCCUPY;
get_memoccupy (MEM_OCCUPY *mem) //对无类型get函数含有一个形参结构体类弄的指针O
*&&&&&&&&&
n;&&&&&&&&&&&&
char buff[256];&&
MEM_OCCUPY *m;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
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-&name2);
fclose(fd);&&&&
//关闭文件fd
int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)
unsigned long od,
unsigned long id,
int cpu_use = 0;&&
od = (unsigned long) (o-&user +
o-&nice + o-&system
+o-&idle);//第一次(用户+优先级+系统+空闲)的时间再赋给od
nd = (unsigned long) (n-&user +
n-&nice + n-&system
+n-&idle);//第二次(用户+优先级+系统+空闲)的时间再赋给od
id = (unsigned long) (n-&user -
o-&user);&&&
//用户第一次和第二次的时间之差再赋给id
sd = (unsigned long) (n-&system -
o-&system);//系统第一次和第二次的时间之差再赋给sd
if((nd-od) != 0)
cpu_use = (int)((sd+id)*10000)/(nd-od);
//((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used
else cpu_use = 0;
//printf("cpu: %u/n",cpu_use);
return cpu_
get_cpuoccupy (CPU_OCCUPY *cpust) //对无类型get函数含有一个形参结构体类弄的指针O
n;&&&&&&&&&&&
char buff[256];
CPU_OCCUPY *cpu_
cpu_occupy=
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
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_
//获取内存
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);
我们在搞性能测试的时候,对后台服务器的CPU利用率监控是一个常用的手段。服务器的CPU利用率高,则表明服务器很繁忙。如果前台响应时间越来越大,而后台CPU利用率始终上不去,说明在某个地方有瓶颈了,系统需要调优。这个是即使不懂技术的人都容易理解的事情。
上面理解对吗?我个人觉得不十分准确。这个要看后台你测试的进程是什么类型的。如果是计算密集型的进程,当前端压力越来越大的时候,很容易把CPU
利用率打上去。但是如果是I/O网络密集型的进程,即使客户端的请求越来越多,但是服务器CPU不一定能上去,这个是你要测试的进程的自然属性决定的。比
较常见的就是,大文件频繁读写的cpu开销远小于小文件频繁读写的开销。因为在I/O吞吐量一定时,小文件的读写更加频繁,需要更多的cpu来处理I/O
在Linux/Unix下,CPU利用率分为用户态 ,系统态 和空闲态
,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。平时所说的CPU利用率是指:CPU执行非系统空闲进程的时间
/ CPU总的执行时间 。
在Linux的内核中,有一个全局变量:Jiffies。
Jiffies代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是
1/HZ。Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个CPU时间片,Jiffies都要加1。
CPU的利用率就是用执行用户态+系统态的Jiffies除以总的Jifffies来表示。
在Linux系统中,可以用/proc/stat文件来计算cpu的利用率(详细的解释可参考:http:
//www.linuxhowtos.org/System/procstat.htm)。这个文件包含了所有CPU活动的信息,该文件中的所有值都是从
系统启动开始累计到当前时刻。
1.[sailorhzr@builder ~]$ cat
/proc/stat&&
2.cpu& 432661
13295&& 86656
3.cpu 0 123075&& 2462
4.cpu 1 111917&& 4124
69697&& 123
5.cpu 2 103164&& 3554
64032&& 106
6.cpu 3 94504&& 3153
0&& 7376958
0&& 1054602
10.processes&
11.procs_running&
12.procs_blocked&
CPU 以及CPU0、CPU1、CPU2、CPU3每行的每个参数意思(以第一行为例)为:
user (432661)
nice (13295)
system (86656)
iowait (171474)
softirq (5346)
从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含
nice值为负进程。1jiffies=0.01秒
&从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
&从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
&从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
&从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
&从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
&从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)
CPU时间=user+system+nice+idle+iowait+irq+softirq
“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。
那么CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:
1.cpu usage=(idle 2 -idle 1 )/(cpu 2 -cpu 1 )*
2.cpu usage=[(user_ 2& +sys_ 2 +nice_ 2 ) - (user_
1& + sys_ 1 +nice_ 1 )]/(total_
2& - total_ 1 )* 100&
以下用分别用bash和perl做的一个cpu利用率的计算:
本人注:以下代码则采用公式为:
1.total_ 0 USER[ 0 ]+NICE[ 0 ]+SYSTEM[ 0 ]+IDLE[ 0 ]+IOWAIT[ 0
]+IRQ[ 0 ]+SOFTIRQ[ 0 ]&&
2.total_ 1 =USER[ 1 ]+NICE[ 1 ]+SYSTEM[ 1 ]+IDLE[ 1 ]+IOWAIT[ 1
]+IRQ[ 1 ]+SOFTIRQ[ 1 ]&
&3.cpu usage=(IDLE[ 0 ]-IDLE[ 1 ]) / (total_ 0
-total_ 1 ) *&
###bash 代码
1.CODE: #!/bin/sh&&
3.##echo user nice system idle iowait irq
4.CPULOG_1=$(cat /proc/stat | grep& 'cpu
'& | awk& '{print $2" "$3" "$4"
"$5" "$6" "$7" "$8}' )&
&5.SYS_IDLE_1=$(echo&
$CPULOG_1& | awk& '{print $4}'
6.Total_1=$(echo& $CPULOG_1& |
awk& '{print $1+$2+$3+$4+$5+$6+$7}'
8.sleep 5&&
10.CPULOG_2=$(cat /proc/stat | grep& 'cpu
'& | awk& '{print $2" "$3" "$4"
"$5" "$6" "$7" "$8}' )&
&11.SYS_IDLE_2=$(echo&
$CPULOG_2& | awk& '{print $4}'
12.Total_2=$(echo& $CPULOG_2& |
awk& '{print $1+$2+$3+$4+$5+$6+$7}'
14.SYS_IDLE=`expr& $SYS_IDLE_2&
-& $SYS_IDLE_1
16.Total=`expr& $Total_2&
-& $Total_1
17.SYS_USAGE=`expr& $SYS_IDLE / $Total *100 |bc
19.SYS_Rate=`expr 100- $SYS_USAGE& |bc
21.Disp_SYS_Rate=`expr& "scale=3;
$SYS_Rate/1"&
22.echo& $Disp_SYS_Rate
###perl 代码
1.#!/usr/bin/perl&&
5.$SLEEPTIME =5;&&
7.if& (-e& "/tmp/stat" )
8.unlink& "/tmp/stat"
10.open (JIFF_TMP,&
"&&/tmp/stat" ) ||
die& "Can't open /proc/stat file!/n"
11.open (JIFF,& "/proc/stat" ) ||
die& "Can't open /proc/stat file!/n"
=&JIFF&;&&
13.print JIFF_TMP& $jiff_0 [0]
14.close (JIFF);&&
16.sleep& $SLEEPTIME
18.open (JIFF,& "/proc/stat" ) ||
die& "Can't open /proc/stat file!/n"
=&JIFF&;&&
20.print JIFF_TMP& $jiff_1
21.close (JIFF);&&
22.close (JIFF_TMP);&&
'{print /$2}'&& "/tmp/stat"
'{print /$3}'&& "/tmp/stat"
'{print /$4}'&& "/tmp/stat"
'{print /$5}'&& "/tmp/stat"
'{print /$6}'&& "/tmp/stat"
'{print /$7}'&& "/tmp/stat"
=`awk& '{print
/$8}'&& "/tmp/stat"
32.$JIFF_0 = $USER [0]+ $NICE [0]+ $SYSTEM [0]+ $IDLE [0]+ $IOWAIT
[0]+ $IRQ [0]+ $SOFTIRQ [0];&
&33.$JIFF_1 = $USER [1]+ $NICE [1]+ $SYSTEM [1]+
$IDLE [1]+ $IOWAIT [1]+ $IRQ [1]+ $SOFTIRQ
35.$SYS_IDLE =( $IDLE [0]- $IDLE [1]) / ( $JIFF_0 - $JIFF_1 ) *
36.$SYS_USAGE =100 -& $SYS_IDLE
38.printf ( "The CPU usage is %1.2f%%/n" , $SYS_USAGE
源资料来自:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。怎么看服务器cpu和内存使用情况_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
怎么看服务器cpu和内存使用情况
我有更好的答案
并且会处在对话的模式 -- 用基于 top 的命令;
win7可以从任务管理器查看CPU和内存使用状态。在电脑下面任务栏单击鼠标右键“启动任务管理器”(快捷键Ctrl+Alt+Del),然后在“性能”栏目下查看。
Linux下在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要,CPU 使用状态会以全屏的方式显示。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。top命令是Linux下常用的性能分析工具你好楼主
采纳率:78%
要看是什么操作系统。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包

我要回帖

更多关于 cpu使用率实时打印 的文章

 

随机推荐