Linux释放内存脚本

vi recover_mem.sh

#!/bin/bash 

#系统分配的区总量
mem_total=`free -m |grep Mem | awk ‘{print  $2}‘` 

#当前剩余的free大小
mem_free=`free -m |grep Mem | awk ‘{print  $4}‘` 

#当前已使用的used大小
mem_used=`free -m |grep Mem | awk ‘{print  $3}‘` 

if (($mem_used !=0)); then 

#如果已被使用,则计算当前剩余free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
   mem_per=0`echo"scale=2;$mem_free/$mem_total" | bc`
 DATA="$(date -d "today"+"%Y-%m-%d-%H-%M") free percent is : $mem_per"
echo $DATA >>/var/log/mem_detect.log
#设置的告警值为20%(即使用超过80%的时候告警)。
   mem_warn=0.20 

#当前剩余百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
   mem_now=`expr $mem_per \> $mem_warn` 

#如果当前使用超过80%(即剩余小于20%,上面的返回值等于0),释放内存
  if (($mem_now == 0)); then
      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 andinodes:
      echo 3 > /proc/sys/vm/drop_caches
  fi
fi

before sh -x recover_mem.sh

[[email protected]]# free  -m
             total       used       free     shared    buffers     cached
Mem:         15948      14774       1173          0        130       7926
-/+ buffers/cache:       6717       9231
Swap:            0          0          0

after sh -x recover_mem.sh

[[email protected]]# free -m
             total       used       free     shared    buffers     cached
Mem:         15948       6603       9344          0          1         18
-/+ buffers/cache:       6582       9365
Swap:            0          0          0

可以看出,cache的缓存已被释放。值得注意的是,cache被释放后,对mysql性能影响比较明显的,因为mysql需要重新cache,因此该脚本仅作救急用,只有当free中剩余的内存低于10%的时候,该脚本才会执行,以防止oom kill掉mysql进程,最直接的手段还是加内存。

时间: 2024-08-29 21:53:00

Linux释放内存脚本的相关文章

Linux 释放内存脚本

新建shell文档 vi /opt/free.sh 可用内存小于400M的时候, 将会进行释放 #!/bin/bash sync free -m |grep -i mem |awk '{if($4 < 400){ printf("3") > "/proc/sys/vm/drop_caches"}}'; 计划运行 crontab -e 10 * * * * /opt/free.sh

linux释放内存

首先我们可能会用free 去查看内存的使用率,它应该是这样的 [[email protected] ~]# free -m             total       used       free     shared    buffers     cached Mem:         32040      31707        332          0        498      27649 -/+ buffers/cache:       3559      28480

(转)增加定时检测linux占用内存,及时清理功能

增加定时检测linux占用内存,及时清理功能 原文:http://www.voidcn.com/article/p-wnmannom-boa.html free -m 查看,发现内存跑满了. 再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用7.9%. 但是总内存大小8G,竟然有5G都被使用了, 那是什么占用的呢? 百度了一下,据说是centos为了提高效率,把部分使用过的文件缓存到了内存里. 如果是这样的话,我又不需要这样的文件性能,那就可以释放.如下两

CentOS7清理yum缓存和释放内存方法

清理yum缓存 清理yum缓存使用yum clean 命令,yum clean 的参数有headers, packages, metadata, dbcache, plugins, expire-cache, rpmdb, all yum clean headers #清理/var/cache/yum的headers yum clean packages #清理/var/cache/yum下的软件包 yum clean metadata ... Linux释放内存 释放网页缓存(To free

Linux 下释放内存,swap交换区缓存

关于内存耗尽的总结: 1)在进程收到OOM之前,内核将刷新文件系统的cache来释放空间. 2)将交换区的页面移到磁盘上. 3)当内存变少时,虚拟性使每个进程通过交换区来做简单的上下文环境切换. 4)当进程消耗尽交换内存后,才会引发out-of-memory(OOM)来kill那些进程. 所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了. 要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches.这个文件中记录了缓

Linux 手动释放内存

Linux 用了一段时间,内存就爆满了,Swap也开始使用,因为linux设计读取的数据都会缓存在内存里面,这样对于频繁读取的应用可以减少IO消耗,但像我这种不是SSD硬盘的PC用户,打开应用就感觉一卡一卡的,烦都烦死啦,不得不手动清除内存的数据(理论上linux会自动释放内存). 其实一条命令就搞定了:echo 3 > /proc/sys/vm/drop_caches 但在执行这条命令之前请先sync,把缓存的数据写到磁盘里面,要不有缓冲写数据,就有得你哭了^-^ 3是释放所有内存,默认是0,

RHCA RH442实战系列(二)之Linux buffer内存释放

1. 说明   Linux的内核负责硬件管理,资源调度,进程管理,和资源管理等相关工作,其中内存资源管理做为kernel的一项非常重要的工作.kernel在处理文件时,如打开一个文件,会将文件的元数据信息,即文件名,inode等信息记录在buffer中,后续重复读取相同的文件,则直接冲buffer中读取,这样的机制能够提高速度,此外,对于文件的内容,将会记录在cache中保存,对于buffer和cache,内存会有自动清理的机制,如果buffer和cache一直无法释放,可能导致的原因有:内存泄

linux下怎样释放内存、swap分区满的情况

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了. Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换).Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作.但是在进行了大量文件操作之后,缓存会把内存资源基本用光.但实际上我们文件操作已经完

Linux手动释放内存

手动释放内存 1.sync将内存中的缓存写入磁盘 2.  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.