免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1801 | 回复: 7
打印 上一主题 下一主题

怎样测试linux可以用到所有的内存? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-07 11:30 |只看该作者 |倒序浏览
新的服务器有2G的内存。之前还没用过这么多内存的机器,不怕您笑话。
想知道用怎样的方法测试可以确认linux可以用到所有的内存?
每次执行free -m发现有超过60%的内存都闲置,所以担心linux能否在有需要时可以用到实际配置的内存。
哪位大侠有这样的经验,本人在此多谢了。

论坛徽章:
0
2 [报告]
发表于 2006-04-07 11:38 |只看该作者
呵呵,你TOP一下,里面有CACHE,BUFFER等 ,用上一段时间,你的BUFFER会增大,空闲就变小了,需要 里当然会用到你的空闲内存

论坛徽章:
0
3 [报告]
发表于 2006-04-07 12:46 |只看该作者
我的新机器也是这样,才1G内存,连续运行几十天了,还是开了图形界面,内存还是有700M多空闲,真不知道是不是机器有问题。
曾用到过400多M,可过一段时间使用的内存有减到200多M了,汗~
哪位说一下怎么检查是不是有问题

论坛徽章:
0
4 [报告]
发表于 2006-04-07 12:51 |只看该作者
free命令专门用来察看内存的使用情况的,也可以用uptime看看系统的负载

论坛徽章:
0
5 [报告]
发表于 2006-04-07 13:34 |只看该作者
原帖由 supertcy 于 2006-4-7 12:46 发表
我的新机器也是这样,才1G内存,连续运行几十天了,还是开了图形界面,内存还是有700M多空闲,真不知道是不是机器有问题。
曾用到过400多M,可过一段时间使用的内存有减到200多M了,汗~
哪位说一下怎么检查是不 ...

没问题,你的机器不够繁忙,用不了那么多的内存而已。

论坛徽章:
0
6 [报告]
发表于 2006-04-07 13:48 |只看该作者
原帖由 barterr 于 2006-4-7 11:30 发表
新的服务器有2G的内存。之前还没用过这么多内存的机器,不怕您笑话。
想知道用怎样的方法测试可以确认linux可以用到所有的内存?
每次执行free -m发现有超过60%的内存都闲置,所以担心linux能否在有需要时可以 ...

本人现正在开发一个服务器memory的测试程序,要求是要测试到出去OS保留外的所有内存,待兄弟我整理一下,在发上来

论坛徽章:
0
7 [报告]
发表于 2006-04-07 22:08 |只看该作者
原帖由 dragonII 于 2006-4-7 13:48 发表

本人现正在开发一个服务器memory的测试程序,要求是要测试到出去OS保留外的所有内存,待兄弟我整理一下,在发上来

等着你的程序。多谢!

论坛徽章:
0
8 [报告]
发表于 2006-04-08 10:16 |只看该作者
只是粗略的整理了一下,希望大家能够接受!:)

此篇文章是以内存测试程序为出发点,使用此方法来测试内存需要关闭其他的应用程序,尽量让此程序独享系统所能分配的内存

不管现在你拥有多少内存,如果想将其耗尽的话,有一个很简单的方法
1、现解析/proc/meminfo,这是最方便,也是最快的方法,由于你的程序是要以OS为平台,所以你无法侵占OS所占用的那一部分内存,在/proc/meminfo中,你只需要关心三个字段的值:MemFree, Buffers, Cached,具体原因,很多地方都有讲到,此处不赘述,将这三个字段的值相加,所得的数据便是操作系统可以分配给用户的最大内存空间(KB)
2、分配内存:将第一步所得的结果化为单位为Byte的值,这个值便是你需要操作系统为你分配的内存大小,在此用dwMemSize变量表示,
    ppMem = (unsigned char*)malloc(sizeof(unsigned char) * dwMemSize); 分配内存,有一点不同于普通的内存动态分配,那便是在分配成功后(一定要检测ppMem的值),要记得用函数
    int mlock(const void *addr, size_t len);将已分配的内存禁止分页处理,因为dwMemSize的值并不一定为分页大小的整数倍,若不需要此块内存,记得在free掉之前用munlock解锁内存块
3、检查此块内存是否真的分配成功
    在这里提供我所使用过的方法,通过 DWORD dwMemBlkNum = dwMemSize /1024/64;计算出以64K大小为一块的总块数,然后:
  dwMemErr = 0;
  wMem = (WORD *)ppMem ;       
  for ( i = 1; i <= (int)dwMemBlkNum; i++)
    {
      for ( d = 0; d < 0x10000; d=d+2)
       {
          *wMem = (WORD)(2*(d+i));
          wMem = wMem + 1;
       }         
    }
          
    wMem = (WORD *)gpMem;
    for ( i = 1; i <= (int)dwMemBlkNum; i++)
      {                 
        for ( d = 0; d < 0x10000; d=d+2)
          {
            if (*wMem != (WORD)(2*(d+i)))
             {dwMemErr=1; break;};
               wMem=wMem+1;
          }
         if (dwMemErr)
            {
              break;
           }         
    }
然后通过dwMemErr的值来判断此段内存是否真的可用,若dwMemErr == 0,那么表示没有问题,此时你可以按任何你想的方式来耗尽系统的内存,不管有多大,若不成功,需要回到第一步做重新分配内存的动作,知道成功为止

在此声明,此种方法只用于测试,对一般的应用程序用处可能不会很大,只是通过此种方法是大家能够对内存分配操作的更加灵活,希望会有帮助,由于工作原因,牵扯到所谓很多的公司机密,程序的很多细节不便在此透漏,见谅
另外,本人在另一篇帖子中大概讲述了一下对CPU的操作,也希望大家能够对内核在cpu调度方面有所了解
http://bbs.chinaunix.net/viewthr ... &extra=page%3D3

有空之余,上一下本人的blog吧,刚开的,希望大家支持一下

[ 本帖最后由 dragonII 于 2006-4-8 10:18 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP