linux设置文件缓存刷盘|如何为linux释放缓存

linux设置文件缓存刷盘|如何为linux释放缓存的第1张示图

⑴ linux怎么绕开文件系统缓存

无法绕开的。文件系统缓存是内核自动控制的。其他的方法没有试过了,你可以自己网络看看

⑵ 如何清除linux的内存缓存,缓冲和交换空间

linux和其他操作系统一样,已经实现了很有效的内存管理机制,但是任何一个进程损坏了系统的内存,那么你就必须清理它,linux提供了一个比较好的方式刷新\清除RAM缓存。注意:并不是什么时候都需要清除RAM缓存的,大家都知道,linux查找数据都是优先从RAM缓存中查找的,一旦清空缓存,所有的数据都需要从磁盘读取,所以只在需要的时候清空缓存,才是正确的选择。如何清除linux缓存? 1.只清除PageCache: # sync; echo 1 > /proc/sys/vm/drop_caches 2.清除dentries and inodes # sync; echo 2 > /proc/sys/vm/drop_caches 3.同时清除PageCache和dentries and inodes # sync; echo 3 > /proc/sys/vm/drop_caches 对上面的命令的解释: sync将会刷新系统的buffer 缓存。 根据官方内核文档描述,对drop_caches写入值将会在不杀死任何应用服务的情况下清空缓存。 在生产环境中建议使用echo 1,因为它会优先清空磁盘缓存。 效果展示: 使用shell脚本自动在晚上2点清除RAM缓存: vim clearcache.sh #!/bin/bashecho "echo 1 > /proc/sys/vm/drop_caches" # chmod 755 clearcache.sh# crontab -e 0 3 * * * /path/to/clearcache.sh 如何清除交换空间?简单的清除可以使用如下的命令1# swapoff -a && swapon -a 结合上面的脚本: vim clearcache.sh #!/bin/bashecho "echo 1 > /proc/sys/vm/drop_caches" && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'希望我的回答能帮到您,满意请采纳,谢谢!

⑶ 如何为linux释放缓存

当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法。那么我来谈谈这个问题。一、通常情况先来说说free命令:# free -mtotal used free shared buffers cachedMem: 249 163 86 0 10 94-/+ buffers/Cache: 58 191SWAP: 511 0 511其中:total 内存总数used 已经使用的内存数free 空闲的内存数shared 多个进程共享的内存总额buffers buffer Cache和cached Page Cache 磁盘缓存的大小-buffers/cache (已用)的内存数:used – buffers – cached+buffers/cache(可用)的内存数:free + buffers + cached可用的memory=free memory+buffers+cached有了这个基础后,可以得知,我现在used为163MB,free为86MB,buffer和cached分别为10MB,94MB。那么我们来看看,如果我执行复制文件,内存会发生什么变化。# cp -r /etc ~/test/# free -mtotal used free shared buffers cachedMem: 249 244 4 0 8 174-/+ buffers/cache: 62 187Swap: 511 0 511在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐,都被cached吃掉了。别紧张,这是为了提高文件读取效率的做法。为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。那么有人说过段时间,linux会自动释放掉所用的内存。等待一段时间后,我们使用free再来试试,看看是否有释放?# free -mtotal used free shared buffers cachedMem: 249 244 5 0 8 174-/+ buffers/cache: 61 188Swap: 511 0 511似乎没有任何变化。(实际情况下,内存的管理还与Swap有关)那么我能否手动释放掉这些内存呢?回答是可以的!二、手动释放缓存/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与Kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:# cat /proc/sys/vm/drop_caches0首先,/proc/sys/vm/drop_caches的值,默认为0。# sync手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件)# echo 3 > /proc/sys/vm/drop_caches# cat /proc/sys/vm/drop_caches3将/proc/sys/vm/drop_caches值设为3# free -mtotal used free shared buffers cachedMem: 249 66 182 0 0 11-/+ buffers/cache: 55 194Swap: 511 0 511再来运行free命令,会发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB。那么有效的释放了buffer和cache。有关/proc/sys/vm/drop_caches的用法在下面进行了说明/proc/sys/vm/drop_caches (since Linux 2.6.16)Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to become free.To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.

⑷ linux中调用ftp下载文件,如何将缓存实时刷到磁盘上,文件太大,占用太多cached

这缓存是操作系统控制的,跟大文件没什么关系,如果要刷新,执行sync命令

⑸ linux系统有没有参数控制文件系统缓存

当然有。linux磁盘参数调优,要以集群目的为依据,如果强调安全,那么要适当降低写缓冲。如果强调写速度,那么要加大写缓冲。

⑹ linux怎样提升磁盘读写性能

关于页面缓存的信息,可以用cat /proc/meminfo看到。其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加。一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。Linux 用pdflush进程把数据从缓存页写入硬盘,查看有多少个pdflush进程cat /proc/sys/vm/nr_pdflush_threadspdflush的行为受/proc/sys/vm中的参数的控制/proc/sys/vm/dirty_writeback_centisecs (default 500):1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个(更多个)线程。如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题。pdflush的第一件事是读取/proc/sys/vm/dirty_expire_centiseconds (default 3000)1/100秒。缓存页里数据的过期时间(旧数据),在下一个周期内被写入硬盘。默认30秒是一个很长的时间。第二件事是判断内存是否到了要写入硬盘的限额,由参数决定:/proc/sys/vm/dirty_background_ratio (default 10)百分值,保留过期页缓存(脏页缓存)的最大值。是以MmeFree+Cached-Mapped的值为基准的pdflush写入硬盘看两个参数:1 数据在页缓存中是否超出30秒,如果是,标记为脏页缓存;2 脏页缓存是否达到工作内存的10%;以下参数也会影响到pdflush/proc/sys/vm/dirty_ratio (default 40)总内存的最大百分比,系统所能拥有的最大脏页缓存的总量。超过这个值,开启pdflush写入硬盘。如果cache增长快于pdflush,那么整个系统在40%的时候遇到I/O瓶颈,所有的I/O都要等待cache被pdflush进硬盘后才能重新开始。对于有高度写入操作的系统dirty_background_ratio: 主要调整参数。如果需要把缓存持续的而不是一下子大量的写入硬盘,降低这个值。dirty_ratio: 第二调整参数。Swapping参数/proc/sys/vm/swappiness默认,linux倾向于从物理内存映射到硬盘缓存,保持硬盘缓存尽可能大。未用的页缓存会被放进swap区。数值为0,将会避免使用swapping100,将会尽量使用swapping少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。如果有大量的写操作,为避免I/O的长时间等待,可以设置:$ echo 5 > /proc/sys/vm/dirty_background_ratio$ echo 10 > /proc/sys/vm/dirty_ratio文件系统数据缓冲需要频繁的内存分配。加大保留内存的值能提升系统速度和稳定。小于8G的内存,保留内存为64M,大于8G的设置为256M$ echo 65536 > /proc/sys/vm/min_free_kbytesI/O 调度器cat /sys/block/[disk]/queue/scheler4中调度算法noop anticipatory deadline [cfq]deadline : deadline 算法保证对既定的IO请求以最小的延迟时间。anticipatory: 有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。对数据库应用很糟糕,而对于Web Server等则会表现不错。cfq: 对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。noop: 对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。改变调度器$ echo deadline > /sys/block/sdX/queue/scheler对于数据库服务器,deadline算法是推荐的。提高调度器请求队列的$ echo 4096 > /sys/block/sdX/queue/nr_requests有大量的读请求,默认的请求队列应付不过来,可以提高这个值。缺点是要牺牲一定的内存。为了增加连续读取的吞吐量,可以增加预读数据量。预读的实际值是自适应的,所以使用一个较高的值,不会降低小型随机存取的性能。$ echo 4096 > /sys/block/sdX/queue/read_ahead_kb如果LINUX判断一个进程在顺序读取文件,那么它会提前读取进程所需文件的数据,放在缓存中。服务器遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。

/proc/sys/vm/dirty_ratio

控制文件系统的写缓冲区的大小,单位是百分比,表示占系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值。

/proc/sys/vm/dirty_background_ratio

控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘.每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘.增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值:

/proc/sys/vm/dirty_writeback_centisecs

控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值。该参数的设置应该小于dirty_expire_centisecs,但也不能太小,太小I/O太频繁,反而使系统性能下降。具体可能需要在生产环境上测试。据说1:6 (dirty_expire_centisecs : dirty_writeback_centisecs )的比例比较好。

/proc/sys/vm/dirty_expire_centisecs

声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。

/proc/sys/vm/vfs_cache_pressure

表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache

/proc/sys/vm/min_free_kbytes

表示强制Linux VM最低保留多少空闲内存(Kbytes)。缺省设置:724(512M物理内存)

/proc/sys/vm/nr_pdflush_threads

表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。

/proc/sys/vm/overcommit_memory

指定了内核针对内存分配的策略,其值可以是0、1、2。0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2, 表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。缺省设置:0

/proc/sys/vm/overcommit_ratio

如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。系统可分配内存=交换空间+物理内存*overcommit_ratio/100缺省设置:50(%)

/proc/sys/vm/page-cluster

表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。缺省设置:3(2的3次方,8页)

/proc/sys/vm/swapiness

表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。更改:/etc/sysctl.conf

vm.dirty_ratio=40

sysctl -p查看:

find /proc/sys/vm -name dirty* -print | while read name; do echo $name ;cat ${name}; done

⑺ linux如何把内存做成硬盘缓存

开启swap就可以了,其他的可能要专门程序。swap就是缓存了,内存大用内存,内存不大用的硬盘空间,虽然还不是你要的那样,可是内存大了开swap也可以其实linux文件打开了不是实时写的,退出要做sync,不然可能就是不在硬盘

⑻ Linux系统中进行磁盘管理的常用命令有哪些

parted、fdisk、df、、fsck、mkfs、mke2fs还有LVM的一套命令,比如pvcreate、vgcreate、lvcreate等等

未经允许不得转载:山九号 » linux设置文件缓存刷盘|如何为linux释放缓存

赞 (0)