摘抄并用于自查

Linux mem/swap/buffers/cached区别

  free命令相对于top,提供了更简洁的查看系统内存使用情况:

  # free -m

  mem:表示物理内存统计

  buff/cache:表示物理内存的缓存统计

  swap:表示硬盘上交换分区的使用情况

  系统当前真正可用的内存并不是第一行 free 标记的,他仅代表未被分配的内存

  

buff/cache列占用过高

  buff/cache主要干啥来的?

  Linux具有先进的缓存机制,会针对dentry(用于VFS-虚拟文件系统,加速文件路径名到inode的转换)、buffer cache(针对磁盘块的读,写)和 page cache(针对文件 inode 的读写)进行缓存操作来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源基本用完,虽然文件读取效率提高了,但是物理内存会被逐渐吃完。

  原来是因为系统进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches 的默认参数设置的就是不释放。

  drop_caches 的值可以是 0-3 之间的数字,代表不同的含义:

  0:不释放(系统默认值)

  1:释放页缓存

  2:释放dentries和inode

  3:释放所有缓存

  修改:# echo 1 > /proc/sys/vm/drop_caches

小插曲

  当Linux的物理内存快要被耗尽时,系统会把一些进程占用的内存转移到 swap 区,当物理内存被释放一部分时,swap 区的一些内存占用又慢慢回到 mem 区,但是 mem 区却不再是之前的满负荷状态,而是有一部分 free 的内存!

【总结】

  1)当物理内存快被耗尽时,系统并没有崩溃,而是拿 swap 做临时内存,当两者都耗尽,系统 OutofMemory

  2)物理内存达到峰值,系统中一些不常用的进程内存占用被提到 swap 区

  3)当 Men 区的资源进行释放时,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 men 区

  4)swap 是内存不够时,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级

最新文章

  1. Hibernate中事务的隔离级别设置
  2. 读写SD
  3. window.open参数设置及如何全屏显示(转)
  4. 关于Oracle的性能调整(一)
  5. tomcat+oracle连接池
  6. Python调用C可执行程序(subprocess) 分类: python 服务器搭建 C/C++ shell 2015-04-13 21:03 87人阅读 评论(0) 收藏
  7. MySQL FROM 子查询
  8. Maven相关介绍
  9. js判断字符串中的英文和汉字
  10. oracle中的DECODE
  11. 如何从本地把项目上传到github&&如何把github项目通过clone复制下来
  12. MFC俄罗斯方块
  13. GWAS分析基本流程及分析思路
  14. 报数的golang实现
  15. mysql之 innobackupex备份+binlog日志的完全恢复【转】
  16. 零基础学习python_字符串(14-15课)
  17. innobackupex做MySQL增量备份及恢复【转】
  18. SVN开启端口监听,并设置开机启动
  19. MySql 关键字冲突解决办法
  20. InnoDB: The innodb_system data file 'ibdata1' must be writable错误

热门文章

  1. 拾遗:btrfs
  2. 前端(十四)—— JavaScript常用类:Number、Date类、字符串、数组、Math类、正则
  3. 自记录:git如何上传文档到git@osc
  4. 笔记43 Spring Web Flow——订购披萨应用详解
  5. BCZM : 2.1
  6. vue之TodoMVC项目实战
  7. Vue.js 监听属性
  8. vue v-for 组件传值 enter传值
  9. 转 直接在浏览器运行Python代码
  10. react使用阿里爸爸的iconfont时,不展示的问题