本人做流媒体开发的,工作中需要将mpg文件转化成一定格式发送到网络,由于文件太大,程序用mmap()来实现文件的读取,但在实测过程中发现一个大问题,如下: 服务器配置: CPU:两颗至强3.0 内存:2G 磁盘:3个SATA硬盘组成磁盘阵列 测试时同时运行30个播放程序读取30个不同的mpg文件,程序起初运行画面播放非常流畅,几分钟过后,内存剩下15MB左右时,mmap()就开始不停 的进行页面置换,将新的数据读入内存,老的数据...
by almeydifer - Linux文档专区 - 2009-10-31 14:27:48 阅读(1124) 回复(0)
本帖最后由 learn007 于 2013-01-02 15:36 编辑 [code]#define MEM_SIZE (64*1024) int main(int argc, char **argv) { char *p = malloc(MEM_SIZE); int ps = getpagesize(); printf("pagesize=%d\n", ps); if (!p) { perror("oom"); return -1; } if (madvise(p, MEM_SIZE, MADV_MERGEABLE) != 0) { perror("madvise"); return -1; } //advise_merge(); memset(p, 0, 64*1024); while (1) sleep(...