前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发应该知道的Linux系统分析-内存篇

开发应该知道的Linux系统分析-内存篇

作者头像
只喝牛奶的杀手
发布2020-01-13 14:47:37
1.1K0
发布2020-01-13 14:47:37
举报
文章被收录于专栏:只喝牛奶的杀手

用free监控内存free是监控linux内存使用状况最常用的指令,看下面的一个输出

Mem:表示物理内存统计

buffers/cached:表示物理内存的缓存统计

Swap:表示硬盘上交换分区的使用情况.只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap

Mem 行(第一行)数据说明:

Total:单位kb 表示物理内存总大小.

Used: 单位kb 表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用

Free:单位kb 表示未被分配的内存

Shared:单位kb 共享内存,一般系统不会用到Buffers:124212KB 系统分配但未被使用的buffers 数量

Cached:单位kb 系统分配但未被使用的cache 数量-/+ buffers/cache 行(第二行)数据说明:

Used:单位kb,实际使用的buffers 与cache 总量,也是实际使用的内存总量.

Free: 单位kb, 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。Free命令输出的第四行(Swap)这行显示交换内存的总量、已使用量、空闲量通常 buffer 和 cache 可以使用的内存空间越大,系统 IO 和 文件系统访问的性能越好。

在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过的数据会比较快.

一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。

虚拟内存Linux kernel使用虚拟内存机制来利用磁盘对内存的空间进行扩展。Kernel将暂时不用的内存写入到磁盘从而释放出更多的可用内存. 当这些数据再次被使用时,会被重新加载到内存当中。作虚拟内存的磁盘空间被称作swap space。对硬盘的读写,相对于内存来说速度要慢许多,因此使用了虚拟内存的程序,速度也会相应变慢 。虚拟内存的使用,往往被认为是内存出现瓶颈的标志。

内存分页(Memory Paging)和内存交换(Memory swapping)

Memory paging 是一个定时将内存数据同步回磁盘的过程当系统内存不足时,系统会将最近最不常用的内存段交换到交换空间,出现page out;当程序要读的文件在内存中没有找到,这时候出现page fault从磁盘中读取到内存,其实也产生了page inpaging指的是以页为单位的交换,而swapping指的是以整个进程为单位的交换。

  • swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。Free列表示当前空闲的物理内存数量(以k为单位)。
  • buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。
  • cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。
  • si列表示由磁盘调入内存,也就是内存进入内存交换区的数量
  • so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
  • 一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。

Vmstat-swap有人看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

Kswapd 服务职责就是保证可用内存量。它会监控内核里面定义的pages_high和pages_low水位线.如果可用内存量低于pages_low,kswapd进程开始扫描尝试释放,每次释放32页直到可用内存高于pages_high水位线。内核线程kswapd仍然和以前一样,用来处理页面的交换,它可以在内存不足时,将一些进程的页面交换到swap空间之中。而新的算法中,kswapd在可用页面数量小于pages_low时,以及经过了某一段时间时,才被激活。采取新的方法,显然需要激活kswapd的次数被大大减少。而且只在内存空间不够时,才请求进行页面交换,从理论上来说,也更加合理。

Kswapd回收内存的算法被称作Page Frame Reclaim Algorithm内存的回收采用LRU策略,最近不被经常使用的内存页,应该首先被回收swap空间被使用是否意味着出现了内存瓶颈?swap空间被利用恰恰说明了Linux的内存使用的合理性,并不能表示内存出现了瓶颈对Swap空间的换入换出的速率是表征内存出现瓶颈的重要标志。

在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到磁盘上。

少量的可用内存free memory是一个好兆头,高速缓存有效地使用,除非持续写入到交换设备和磁盘。如果系统报告交换设备比较繁忙,这意味着系统内存不足了。很少的swap且这时如果空闲物理内存很少是一个很好的信号;说明充分利用了内存缓存,虽然内存现在不是很贵,当然能用加机器解决的问题也不是什么问题,但是“能省则省”,不要加“无用的”内存。


每周一句:|先改变行为,再改变思维。生命中的贵人都是改变你行为的人,然后你自己的思维也变了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档