⑴ Linux下如何释放内存,swap分区满了怎么办
终止占内存多的进程
可以增加swap区
⑵ 如何为linux释放内存和缓存
在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。
Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?
所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。
要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存
知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。
首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。
#sync
接下来,我们需要将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:
#echo 3 > /proc/sys/vm/drop_caches
此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。
要查询当前缓存释放的参数,可以输入下面的指令:
#cat /proc/sys/vm/drop_caches
#free -m
对于清除swap,只有先关闭swap了,用:
#swapoff -a
而后启用swap,因为只是清除,不是说不要用swap的嘛 :
#swapon -a
http://blog.sina.com.cn/s/blog_539d6e0c0100ys3o.html
Linux 自动释放内存脚本
发表于119 天前 ? 技术文章 ? 暂无评论
脚本下载地址:Cached
脚本内容:
#! /bin/bash
# cache释放:
# To free pagecache:
sync
sync
#echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes:
#echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
# 说明,释放前最好sync一下,防止丢数据。
利用系统crontab实现每天自动运行:
crontab -e
输入以下内容:
00 00 * * * /root/Cached.sh
每天0点释放一次内存,这个时间可以根据自己需要自行设置,我的服务器情况是每天自动释放一次就OK了
在设置这个脚本的时候,发生了一系列的问题
在测试运行./Cached.sh时提示错误:Permission denied 权限的问题
解决方法:
chmod +x .Cached.sh
或
chmod 777 Cached.sh
接着又出现错误提示:/bin/bash^M: bad interpreter: No such file or directory
这是因为在windows下编辑的.sh文件编码格式和linux下不一样,转换一下编码格式即可:
dos2unix Cached.sh
http://blog.sinorain.com/archives/157
⑶ Linux下swap耗尽该怎么办如何释放swap
Linux下交换内存耗尽如何查看及如何处理。以及查看shell脚本描述。交换内存不足时,启动应用时会报内存不足。
1、启动应用时报内存不足,直接Linux命令行top查看下。swap used100%,0free。
2、reboot服务器能有效的释放swap,可是很多情况下是不能重启服务器的。这时就要弄明白是什么占着内存。查看下/proc目录下内容,发现很多数字命名的目录,这些就是Linux的进程了。
3、要让进程释放swap的方法只有kill掉该进程了。写个脚本来查看具体是哪些进程占着内存啦。
一、对/proc目录下所有以数字为名的目录进行遍历
二、1目录是根进程重启会导致系统重启,所以直接排除掉。
三、算出每个进程占用内存的大小,然后按照大小排序
四、输出内存占用大于1MB的进程
4、将运行结果保存到swap.log文件中
5、查看swap.log.10325这个进程内存占用最多有130几M。
6、直接kill掉,然后再top查看。ok,swap一下子释放了很多,搞定。
注意事项:proc目录下1目录不能直接kill掉。
⑷ 删除swap分区,对linux运行效率影响有多大
看应用
您的提问(回答)过于简略,请再丰富一下内容重新提交
⑸ 该怎么样才能清除并刷新Linux的SWAP分区缓存~~
swapoff -a && swapon -a
⑹ 如何清理Linux中的swap,buffer及cache
使用 Furius ISO Mount 软件,该方法的优点是无需记住以上命令,也无需输入用户密码提权,推荐大家使用。首先安装 Furius ISO Mount,Ubuntu 用户可在 Ubuntu 软件中心搜索安装,或者在终端中输入sudo apt-get
install furiusisomount。
其他 Linux 发行版请使用相应软件包管理器安装或自行编译安装。
注:由于权限问题,部分发行版(Ubuntu 用户无需进行此操作)可能需要将用户添加到 fuse 组,执行sudo adser username
fuse即可。
⑺ linux swap文件被删除,如何恢复
#创建256M大小的文件,文件块大小为1M,传送大小为256块
dd if=/dev/zero of=/tmp/swapfile bs=1024k count=256
#格式化文件
mkswap /tmp/swapfile
#加载交换文件
swapon /tmp/swap
⑻ 如何清除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/bash
echo "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/bash
echo "echo 1 > /proc/sys/vm/drop_caches" && swapoff -a && swapon -a &&
printf '\n%s\n' 'Ram-cache and Swap Cleared'
希望我的回答能帮到您,满意请采纳,谢谢!
⑼ 如何控制Linux清理cache机制
Linux下的缓存机制及清理buffer/cache/swap的方法梳理
(1)缓存机制
为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。
(2)查看缓存区及内存使用情况
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 7866 7725 141 19 74 6897
-/+ buffers/cache: 752 7113
Swap: 16382 32 16350
可以看到内存总共8G,已使用7725M,剩余141M,不少的人都是这么看的,这样并不能作为实际的使用率。因为有了缓存机制,具体该怎么算呢?
空闲内存=free(141)+buffers(74)+cached(6897)
已用内存=total(7866)-空闲内存
由此算出空闲内存是7112M,已用内存754M,这才是真正的使用率,也可参考-/+ buffers/cache这行信息也是内存正确使用率。
(3)可见缓存区分为buffers和cached,他们有什么区别呢?
内核在保证系统能正常使用物理内存和数据量读写情况下来分配缓冲区大小。buffers用来缓存metadata及pages,可以理解为系统缓存,例如,vi打开一个文件。cached是用来给文件做缓存,可以理解为数据块缓存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。
(4)随便说下Swap做什么用的呢?
Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。
swap清理:
swapoff -a && swapon -a
注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大
(5)怎样释放缓存区内存呢?
a)直接改变内核运行参数
#释放pagecache
echo 1 >/proc/sys/vm/drop_caches
#释放dentries和inodes
echo 2 >/proc/sys/vm/drop_caches
#释放pagecache、dentries和inodes
echo 3 >/proc/sys/vm/drop_caches
b)也可以使用sysctl重置内核运行参数
sysctl -w vm.drop_caches=3
注意:这两个方式都是临时生效,永久生效需添加sysctl.conf文件中,一般写成脚本手动清理,建议不要清理。
修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3
上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。
⑽ linux 清理交换区SWAP,对正在服务器上运行的其它应用有什么影响
SWAP其实就是突发内存,也被称作虚拟内存
如图是真实的内存条,SWAP是从硬盘划分过来,当作突发内存用的。当应用程序技术量过大的时候,会把一些运算放到SWAP里进行
所以如果SWAP内存有正在运行的程序,清理SWAP就会造成错误,所以在运行程序的时候不要清理SWAP分区