• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > Ubuntufread占用过多cache

Ubuntufread占用过多cache

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了cache,cache是什么意思,cache是什么文件夹,cache cache,wipe cache partition等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: Ubuntu fread占用过多cache
描述:

本帖最后由 liqinghan 于 2016-03-03 15:56:39 编辑

ubuntuoom内存

最近在ubuntu的平台上碰到这个问题,使用fopen和fread读取文件发现会把ubuntu的cache占用的很大,基本是文件有多大,cache就得有多大?在嵌入式海思的平台上使用,如果使用多个fread读取大文件,就会把cache占用尽了,内存就损耗过度!发生oom killer , Out of memory这种问题!测试代码如下:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include<fcntl.h>
unsigned char *pu8Buf = NULL;
 
void ExitHandleSig(int signo){
if (SIGINT == signo || SIGTSTP == signo){
if(pu8Buf != NULL) free(pu8Buf);
printf("\033[0;31mprogram exit abnormally!\033[0;39m\n");
}
exit(0);
}
int main(){
#if 1
//fread fopen 版本
FILE *fpStrm=NULL;
   
int s32UsedBytes = 0, s32ReadLen = 0;
unsigned int bufSize=1280 * 720  * 3 / 2;
pu8Buf = (unsigned char*)malloc(bufSize);
fpStrm = fopen("../videofile/1280_720_H264.h264", "rb");
if(fpStrm == NULL){
printf("Can't open file \n");
exit(0);
}
signal(SIGINT, ExitHandleSig);
signal(SIGTERM, ExitHandleSig);
while(1){
fseek(fpStrm, s32UsedBytes, SEEK_SET);
               s32ReadLen = fread(pu8Buf, 1, bufSize, fpStrm);
if(s32ReadLen != bufSize){
printf("end of file \n");
fseek(fpStrm, 0, SEEK_SET);
s32UsedBytes = 0;
s32ReadLen  = 0;
}
s32UsedBytes = s32UsedBytes +s32ReadLen ;
sleep(5);
}
#else
//read open 版本
int fileFd;
int s32UsedBytes = 0, s32ReadLen = 0;
unsigned int bufSize=720 * 480  * 3 / 2;
pu8Buf = (unsigned char*)malloc(bufSize);
fileFd = open("../videofile/720_480_H264.h264",O_RDONLY,S_IRUSR);
if(fileFd  == -1)
printf("Can't open file \n");
signal(SIGINT, ExitHandleSig);
signal(SIGTERM, ExitHandleSig);
while(1){
lseek(fileFd, s32UsedBytes, SEEK_SET);
               s32ReadLen = read(fileFd,pu8Buf,bufSize);
if(s32ReadLen != bufSize){
printf("end of file \n");
lseek(fileFd, 0, SEEK_SET);
s32UsedBytes = 0;
s32ReadLen  = 0;
}
s32UsedBytes = s32UsedBytes +s32ReadLen ;
        usleep(50000);
}
#endif
return 1;
}

无论是fread还是read都会如此!Ubuntu怎么有这个bug?


解决方案1:

Linux系统在进行文件读写时都会用到缓存。这些缓存的释放不是立刻执行的。计时用了fclose还不会立刻释放。
考虑用posix_fadvise函数加上POSIX_FADV_DONTNEED来释放。
我在连续多次读写文件时都会这么做。
参考下一下两篇博文:
http://leoncom.org/?p=650719
http://blog.yufeng.info/archives/1917


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Ubuntufread占用过多cache
  • bootm61000000启动内核时,显示了startingkernel,不过突然显示一个disablingoutercache是什么意思

相关文章

  • 2017-06-17并行打印机
  • 2017-06-05 proteus仿真51单片机复位电路电容和电阻的大小选取问题
  • 2017-06-05 很古怪的宏定义,高分求解??????????
  • 2017-06-17ARM和嵌入式裸机编程入门建议
  • 2017-06-05 android内核如何直接使用Linux内核已经自带的内核?
  • 2017-06-05 WINCE60+3G模块系统自带的拨号程序,拨号成功后不会自动休眠现象
  • 2017-06-05 ov5642引脚
  • 2017-06-05 php与lua的关联?nginx与lua的关联?
  • 2017-06-05 请问如何反编译VXD文件
  • 2017-06-05 远距离身份识别

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • NDIS中间层驱动问题::为什么收到的包都是空的?
    • 有没有人对数码相机与pc的通信协议比较了解的?
    • 刚玩STM8遇到个关于时钟的怪问题
    • 求教windowsembeddedstandard
    • 刚进一家公司,对给的任务不是很明白,求帮助
    • 让我揪心的错误啊~Undefinedsymbolabort
    • 同一个型号的机器人DH参数是一定的吗?
    • 轉賣嵌入式系统ARM2410s3c2410ARM开发板99新
    • 急急急。。。。。。请问系统windows调用驱动的什么函数(接口)判断鼠标是否存在?
    • 嵌入式软件开发流程及中断调试方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有