当前位置:  技术问答>linux和unix

linux写文件时怎么降低对系统的开销

    来源: 互联网  发布时间:2017-02-05

    本文导语:  使用的是RHEL 6.1,程序运行时会从远程的NFS服务器上读取文件,然后写到本地磁盘上,但是这样做会严重影响到服务器其他程序的运行,有的服务需要精确计时,只要一拷贝文件,计时就会偏差很大,影响到程序的运...

使用的是RHEL 6.1,程序运行时会从远程的NFS服务器上读取文件,然后写到本地磁盘上,但是这样做会严重影响到服务器其他程序的运行,有的服务需要精确计时,只要一拷贝文件,计时就会偏差很大,影响到程序的运行。
我试着把写文件的代码注释掉,单纯地读远程文件对其他程序影响不大,至少从观察的结果来看没有什么影响。只要涉及到写文件(fwrite),就会对其他程序产生很大的影响。

有没有什么办法,让写文件对系统的其他程序不会有太大影响,速度慢点没关系(10MB/s可以接受)。我已经做过一些实验:
1.每次读100K,然后写文件,sleep 100ms,  效率最低,影响较大
2.每次读20M,然后写文件,sleep 100ms, 效率最高,影响最小(但是还是影响到了别的程序)
3.每次读20M, 分批次每次写320*1024B, 每次fwrite 后sleep 50ms  (影响大)
4.每次只读20M,不写文件,sleep 100ms, 对其他程序无影响

问题可能就出在写文件的时候系统开销太大,有啥方法可以既能保证系统的性能,又不至于拷贝文件太慢???

|
如果是简单点的方法,可以考虑调整内核参数,例如如下这些
sysctl -a | grep dirty
vm.dirty_expire_centisecs = 2999
vm.dirty_writeback_centisecs = 999
vm.dirty_ratio = 40
vm.dirty_background_ratio = 20


如果是复杂点的....可以尝试先将文件写入内存,比如memcached,然后由一个程序在后台异步的低速写入磁盘...之类的...


不过完善的解决方法,我想还是拆分业务吧....把会受到影响的业务拆分到其他机器上...

|
linux文件系统  会合并多次并延后写来优化

所以再优化差别不明显。


|
把每次写入的调大一点。I/O操作会减少。

|
文件总是要写的,缓冲区大一点,会减少系统调用的次数
其他方法不知道了

|
方法3每写完一点延时时间长一些看看有没有改善

|
可以采用缓存机制,一次大量写入取代多次读写

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux_centos_redhat下tar命令解压tgz文件方法
  • 用java读中文linux中的文件是正确的,用java读英文linux版本中的文件是乱码,如何使英文linux读出的文件数据也是中文的?
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • Linux查找包含指定文字的文件(linux查找指定文件)
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • 请问LINUX内核下,哪些文件夹下的文件是跟LINUX的硬件平台无关的?
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • 请问各位linux开发大虾,linux下有类似VC中depends的工具可以查看文件调用了哪些so文件吗?
  • linux内存文件系统ramfs实现原理
  • 急::在Linux下怎么根据另一台windows或linux的文件名,去得到这个文件
  • linux/Centos/ubuntu下如何使用umask命令修改新建文件时的默认权限
  • 我的机器装了WINDOWS2000 和 LINUX 7.3 , 请问在LINUX 中如何访问`WIN2K中的文件?同样在WIN2K中如何访问LINUX 中的文件?
  • Linux内存文件系统(ramdisk)的三种实现方式
  • 请问如何在WINDOWS中访问linux下的文件,并把Windows下的文件复制到linux下的分区中
  • 根据文件大小查找文件的find命令举例(Linux,centos,redhat)
  • linux下copy文件通常又些文件名的大小写会发生变化的,而linux又对大小写敏感,如何解决这一问题
  • Linux下glibc库文件锁:协同锁(advisory lock)和强制锁(mandatory lock)
  • Redhat Linux下用c怎么可以知道一个文件是文件夹还是真的文件?
  • Linux下u盘文件系统相关操作
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • linux下find查找文件命令详细介绍及find文件用法举例说明
  • linux中对文件排序的命令(文件夹中包含子文件)
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3