全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 9145|回复: 12
打印 上一主题 下一主题

[疑问] Centos释放内存以及自动脚本

[复制链接]
跳转到指定楼层
1#
发表于 2015-2-2 05:37:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近服务器老是运行缓慢
free -m 查看,发现内存跑满了。
再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用0.9%。
那是什么占用的呢?
百度了一下,据说是centos为了提高效率,把部分使用过的文件缓存到了内存里。
如果是这样的话,我又不需要这样的文件性能,那就可以释放。如下两个命令就可以:
#sync
#echo 3 > /proc/sys/vm/drop_caches
内存释放后,就占用很低了

可以定时执行吗?百度了一个脚本过来。

  1. # 脚本开始
  2. #
  3. ##########################
  4. #  Freemem by vpshz.com
  5. ##########################
  6. #!/bin/sh
  7. Time1=`date +%Y%m%d`
  8. Time2=`date +%k:%M:%S`
  9. mkdir /backup/freemem/
  10. cd /backup/freemem/
  11. #
  12. #echo "">memstat_$Time1.log
  13. #
  14. echo $Time1--$Time2 >>memstat_$Time1.log
  15. echo "------------------" >>memstat_$Time1.log
  16. echo "The mem stat is :" >>memstat_$Time1.log
  17. echo "" >>memstat_$Time1.log
  18. free >>memstat_$Time1.log
  19. echo "" >>memstat_$Time1.log
  20. #sync
  21. echo "....Freeing......" >>memstat_$Time1.log
  22. echo "">>memstat_$Time1.log
  23. #
  24. echo 1 > /proc/sys/vm/drop_caches
  25. echo 2 > /proc/sys/vm/drop_caches
  26. echo 3 > /proc/sys/vm/drop_caches
  27. echo "---> OK ! " >>memstat_$Time1.log
  28. echo "">>memstat_$Time1.log
  29. free >>memstat_$Time1.log
  30. echo "=========================================================================">> memstat_$Time1.log
  31. echo "">>memstat_$Time1.log
  32. echo "">>memstat_$Time1.log
  33. cd -
  34. cat /backup/freemem/memstat_$Time1.log
  35. # 脚本结束
复制代码


另外一个脚本如下:

  1. # vim /backup/freemem/freemem.sh
  2. #!/bin/bash
  3. used=`free -m | awk 'NR==2' | awk '{print $3}'`
  4. free=`free -m | awk 'NR==2' | awk '{print $4}'`
  5. echo "===========================" >> /backup/freemem/mem.log
  6. date >> /backup/freemem/mem.log
  7. echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /backup/freemem/mem.log
  8. if [ $free -le 200 ] ; then
  9.                 sync && echo 1 > /proc/sys/vm/drop_caches
  10.                 sync && echo 2 > /proc/sys/vm/drop_caches
  11.                 sync && echo 3 > /proc/sys/vm/drop_caches
  12.                 echo "OK" >> /backup/freemem/mem.log
  13. else
  14.                 echo "Not required" >> /backup/freemem/mem.log
复制代码


赋予脚本执行权限   chmod 777 /backup/freemem/freemem.sh
或者chmod +x ./backup/freemem/freemem.sh
定时执行的办法:echo "*/30 * * * * root /backup/freemem/freemem.sh" >> /etc/crontab

此外还可以通过修改/etc/sysctl.conf的方法来达到自动释放缓存的目的。   但是内存不够用,最好还是去找找其他的原因,比如程序设置是否合理,是否突发访问量很大,或者程序设计不合理导致内存溢出等,毕竟操作系统本身设计会考虑各方面的问题,强制腾出cache的大小,可能只是把问题给暂时屏蔽了,不利于判断问题的所在。

不喜欢伸手党

评分

参与人数 1威望 +25 收起 理由
欧阳逍遥 + 25 技术分享要加分。

查看全部评分

2#
发表于 2015-2-2 08:11:23 | 只看该作者
支持下~~不过我认为linux运行缓慢还是得分析下应用,这个释放内存除了查看free -m时美观些,应该没有多大作用
3#
发表于 2015-2-2 08:12:05 来自手机 | 只看该作者
嗯,记号!我不是伸手党,先收藏。若干年以后有用了,再翻来看看~
4#
发表于 2015-2-2 08:30:53 | 只看该作者
先收藏 若干年以后有用了,再翻来看看~
另外只放了个SS有用吗
5#
发表于 2015-2-2 09:12:27 | 只看该作者
这个不知有没有用
6#
发表于 2015-2-2 11:42:01 | 只看该作者
swap 使用量是多少?
8#
发表于 2015-2-2 12:26:05 来自手机 | 只看该作者
我觉得不用特意去释放。除非真的不够用了。
9#
发表于 2015-2-2 12:38:45 | 只看该作者
多此一举。。。你比操作系统还牛了

对于操作系统而言 cache占用的内存是随时可以被释放的 属于可用内存。Windows都有类似的机制,你在任务管理器看到的可用内存其实很多都被用于cache了

打开任务管理器 看物理内存那一栏 你会发现真正“空闲”的内存很少。多数都在“已缓存”里

爆内存还是自己找原因比较好
10#
发表于 2015-2-2 13:32:23 | 只看该作者
感谢分享,已经转载。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-1-15 22:01 , Processed in 0.072539 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表