Chinaunix首页 | 论坛 | 博客
  • 博客访问: 233794
  • 博文数量: 40
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 531
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-25 17:47
文章分类

全部博文(40)

文章存档

2010年(8)

2009年(32)

我的朋友

分类: LINUX

2010-01-01 01:32:32

good bai    

  最近因为测试系统,对于系统中CPU和内存的使用有了一些新的认识。在使用电脑时,我们经常会遇到电脑很卡,有时甚至对用户输入没有反应。那么从CPU和内存的使用来看,这到底是什么情况呢?
说明:本测试在fedora10/11之上完成。
 
1 当用户的某一进程的CPU占有率达到100%时,对系统影响如何呢?为简便我们使用一段脚本来模拟100%运行的进程,脚本内容如下:

while [ 1 ]; do
  
echo test;
done

  运行该脚本后,使用top查看CPU使用情况,发现该进程所在bash的CPU占有率在100%左右,但此时整个系统性能表现仍然良好,鼠标、键盘操作反应十分流畅。这是因为如论是root用户还是普通用户,默认的进程优先级是20(最高40,最低0),而内核线程的优先级默认要高一些    (一般是15 )。这样以默认20的优先级即使运行个十来条100%CPU占有的进程,对系统性能的影响都不是很明显(当然更大的量总是可以拖垮系统)。
  而当使用renice命令调整跳转这个100%运行的进程的优先级到最高优先级(40)时:

renice -n -20 PID

命令说明:-20表示最高优先级40。

它对系统性能的影响就开始明显的表现了,当系统中有两个优先级达到40的100%运行的进程时,系统基本就无法正常使用了。

如上测试得出的结论是:当存在多个大运算量的进程,而且它们的优先级比较高时,这些高优先级进程占有了大量的CPU执行时间,而导致其他程序无法得到执行机会而处于饥饿状态,这就将会显著影响系统的性能,直接表现就是系统响应用户输入非常慢。但我们一般使用系统都是普通用户,而普通用户的进程默认是不会获得很高的运行优先级的,那么我们遇到的系统很卡的情况到底是那种情况呢?

2 内存测试
  内存测试使用一个内存占有量非常大的程序来测试,该程序代码如下(test.c):

#include <stdio.h>
void
main
(){
  
int i = 0;
  
char *mem;
  
unsigned size = 10 * 1024 * 1024;
  
unsigned val = (10 * size) + size;
  
while (1){
      mem
= malloc (val);
      
if (mem == NULL){

          val = val - size;
          
break;
     
}
      
//printf ("mem :%u-%u\n", val, val / (1024 * 1024));
      free (mem);
      val
= val + size;
 
}
  
printf ("MAX malloc:%u-%u\n", val, val / (1024 * 1024));
  mem
= malloc (val);
  
while (1){
      
for (i = 0; i < val ; i++)
        
{
          
*(mem + i) = 1;
     
}
 
}
}

代码说明:程序前半段通过循环测试获得当前系统中最大可分配的内存块,后半段是从系统申请最大的一块内存区域,并且循环给该块中每个单元值置为1,这样做是因为使用malloc分配的内存只有在实际使用时系统才会分配到位。编译并运行该段程序。
编译该程序:

gcc -g -o test test.c

运行test:

./test

使用top命令观察系统资源使用情况,因为该段程序占有大量内存的同时程序也是一直循环执行,所以可以看到系统中CPU和内存的使用率都很高,而且即使是在默认(20)优先级下运行,也会发现系统变得有一些慢,这是因为该程序占用了大量的内存而导致其他程序内存占有量不足,现代操作系统(包括linux)一般都使用页请求制内存管理方式,即执行程序只有一部分代码会载入内存,其他部分在需要的时候由系统负责从外存储载入。我们知道内存的读取速度要远远大于外存储的速度,所以当内存不足时不足时过多的外存调页将严重拖慢系统的速度。这个道理同时也是为什么升级内存后可以较明显的提高系统整个性能的原因。

到此测试结束。个人的一个结论是,系统比较卡时一般是有个别程序同时占用了大量CPU和内存,这样可以通过处理次进程的方式来改善性能情况。但也可能是整个系统中进程累积的资源占用比较高,这种情况下改善情况往往就是要升级电脑硬件了。

另外反现一个情况是:当系统内存不够用时,系统会自动杀死那些占用大量内存的程序。

阅读(2698) | 评论(0) | 转发(0) |
0

上一篇:告诉自己几个事情

下一篇:成功的认识

给主人留下些什么吧!~~