Linux虚拟内存优化的方法

首先查看虚拟内存的使用情况,使用命令
  # free
  查看当前系统的内存使用情况。
  一般来说,linux的物理内存几乎是完全used。这个和windows非常大的区别,它的内存管理机制将系统内存充分利用,并非windows无论多大的内存都要去使用一些虚拟内存一样。这点需要注意。
  Linux下面虚拟内存的默认配置通过命令
  # cat /proc/sys/vm/freepages

  可以查看,显示的三个数字是当前系统的:最小内存空白页、最低内存空白页和最高内存空白。
  注意,这里系统使用虚拟内存的原则是:如果空白页数目低于最高空白页设置,则使用磁盘交换空间。当达到最低空白页设置时,使用内存交换(注:这个是我查看一些资料得来的,具体应用时还需要自己观察一下,不过这个不影响我们配置新的虚拟内存参数)。
  内存一般以每页4k字节分配。最小内存空白页设置是系统中内存数量的2倍;最低内存空白页设置是内存数量的4倍;最高内存空白页设置是系统内存的6倍。这些值在系统启动时决定。
  一般来讲在配置系统分配的虚拟内存配置上,我个人认为增大最高内存空白页是一种比较好的配置方式,以1G的内存配置为例:
  可将原来的配置比例修改为:
  2048 4096 6444
  通过命令
  # echo \"2048 4096 6444\" > /proc/sys/vm/freepages
  因为增加了最高空白页配置,那么可以使内存更有效的利用。

在使用C/C++编程时,有时内存泄漏问题对程序会形成灾难,这种问题往往要仔细检查。linux下有方便测试程序内存管理的工具:valgrind

valgrind包含几个标准的工具,它们是:

1、memcheck

memcheck探测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。因此memcheck工具能够探测到以下问题:

1)使用未初始化的内存

2)读/写已经被释放的内存

3)读/写内存越界

4)读/写不恰当的内存栈空间

5)内存泄漏

6)使用malloc/new/new[]和free/delete/delete[]不匹配。

2、cachegrind

cachegrind是一个cache剖析器。它模拟执行CPU中的L1, D1和L2 cache,因此它能很精确的指出代码中的cache未命中。如果你需要,它可以打印出cache未命中的次数,内存引用和发生cache未命中的每一行 代码,每一个函数,每一个模块和整个程序的摘要。如果你要求更细致的信息,它可以打印出每一行机器码的未命中次数。在x86和amd64 上,cachegrind通过CPUID自动探测机器的cache配置,所以在多数情况下它不再需要更多的配置信息了。

3、helgrind

helgrind查找多线程程序中的竞争数据。helgrind查找内存地址,那些被多于一条线程访问的内存地址,但是没有使用一致的锁就会被查出。这表示这些地址在多线程间访问的时候没有进行同步,很可能会引起很难查找的时序问题。

检查内存泄漏只需要用到第一个功能memcheck

命令如下:valgrind --tool=memcheck --leak-check=full 执行程序命令

比如执行二进制可执行文件aaa

valgrind --tool=memcheck --leak-check=full ./aaa

aaa最好是用-g选项编译的,便于在调试时发现哪一步出现了内存泄漏的问题。

示例详见:http://tech.ccidnet.com/art/2583/20071024/1252121_1.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值