SWAP的理解

1.先讀懂內存查看的命令:

[root@phblwap1 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         16039      15099        939          0        819       2976
-/+ buffers/cache:      11303       4735
Swap:        20481      10810       9670

第一行 Mem:该行使内存的使用和分配状态。
total:表示总物理内存是16039M。
used:这里表示的不是总内存使用状况而是内存分配给buffer和cache的大小(看到这行满了大家不用担心)。
free :表示未分配的物理内存的大小,939M未分配。
shared:这个看别人说是共享内存,我没用过,希望知道LZ兄弟姐妹们给点指点呵呵。
buffers:表示物理内存已经分配给buffer,但是buffer还没有使用的大小。
cached:表示物理内存已经分配给cache,但是cache还没有使用的大小。
第二行 -/+ buffers/cache: 表示物理内存分配给buffer和cache的大小(就是那个15099)的使用情况统计。
used1(区别上面的used):表示物理内存分配给buffer和cache的使用情况,。
free1(区别上面的free):表示未被使用的物理内存。这个才是真实内存剩余的大小,即还有多少可用内存,還有4735 M 可用
第三行 交换空间 下面再來介紹

那么内存与buffer和cache在数值上是又有着怎样的关系呢:
total=used+free
=used1+free1
=buffers+cached+used1+free

buffer(缓冲区)是还未被写入磁盘(未關閉的程序+未寫入的data),cache(缓存)是已经从磁盘中读取和存入磁盘(已關閉的程序+已寫入的data)以备后用。

上面的swap內存使用了 10810M,那什麽時候會使用swap內存?

linux优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用物理内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做cache缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。cache缓存是可以根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,是空闲的。因為当应用程序需要用到内存的时候,buffers/cached会很快地被回收,以供应用程序使用

    查看目前进程正在实际被使用的内存,是used-(buffers+cached) 即15099-819-2976=11304,只有Mem被当前进程实际占用完(free,buffers和cached為0),才会使用到swap的;

 

Q:SWAP分區是什麽
A:用於擴充RAM內存地址的一塊磁盤區域,擴大RAM的存址空間。CPU要運算的數據都是從RAM中讀取的,請自行了解CPU尋址的概念。

Q:為什麽要配置SWAP
A:RAM不足時,就會有進程等待內存資源分配,系統就會運行緩慢,甚至使活動的程序無法運行而失敗;配置了SWAP,系統可以將RAM中暫不

用的程序與數據page out 到SWAP,RAM中就會有騰出來的空間給需要運行的程序加載,使活動程序運行成功;非活动程序的RAM页被写入交换

磁盘(Page Out),如果非活动程序稍后又继续执行,被Page Out的RAM页又重新从SWAP中载入RAM(Page in)。
    要注意的是,只有“匿名數據”才被放入SWAP,不是所有Page Out的RAM頁都會放入SWAP,相對一部份被直接交換到文件系統,文件部份的

數據是直接放回文件;讀文件操作,內存數據被直接釋放,無需交換;寫文件操作,改變部份的數據保存到文件中;只有那些程序運行中用

函數生成的對象,變量的數據,需要交換到SWAP中,因為文件系統不存在對應的存儲文件;這部分數據稱為“匿名數據”。

Q: 如何配置SWAP
A:  分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误,一般来说对于4G 以下的RAM,配置2倍的SWAP空間,4G 以上配置1倍
如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误out of memoery。例如,Web服务器能根据不同的请求数量衍生出多个服务进程, 如果Swap空间用完,即 第三行 swap 9670 為0,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。

     另外,Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负

载,加快Swap交换的速度。如果只有一个Swap交换区,所有的交换操作会使变得很忙,使CPU大多数时间处于等待状态,效率降低。此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

 

Q: 為什麽要釋放SWAP空間
A: 我的理解: 
   1. 被Page Out 到SWAP的RAM頁不會自動釋放,當它們重新Page In RAM使用后,這些RAM頁的SWAP空間不會釋放;當RAM 不足時,又會有不活動的程序的RAM頁(匿名數據) 交換到SWAP,使SWAP USED 增長。SWAP 空間用完了,RAM也用完了,就會報系統錯誤out of memoery

Q: 如何釋放SWAP空間
A: 1.重啟Linux
   2.確保SWAP used的空間小於RAM的剩餘可用空間時,才可用,否則會hung 機

首先我们停掉swap分区,查看swap分区

swapon -s 会查看到你的swap分区是挂在哪里!

然后比如说我的是挂到/dev/sda2

swapoff   /dev/sda2

停止是需要一段时间的,因为他会把内存释放到实际内存当中,

然后在启动我们的swap分区

swapon -a

我们的swap分区内存已经成功释放到了实际内存当中!

 

其他:

     1. 有时,尽管有许多的空闲物理内存,仍然会有许多的SWAP正被使用。这种情况是有可能发生的,如果在某一时刻有进行交换的必要,但后来一个占用很多物理内存的大进程结束并释放内存。被交换出的数据(交換到SWAP中)并不会自动地交换进物理内存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。

     2.  linux.將要被寫入磁盤的數據放入buffer,而不是立刻寫入,寫入由後臺進程完成,這點與oracle的寫入機制是一樣的,大多操作系統都應用磁盤緩沖buffer技術;

    Sync命令倾空(Flushes)缓冲,强迫所有未被写的数据写入磁盘。在传统的UNIX系统中,有一个叫做update的程序运行于后台,每隔30秒做一次sync操作,因此通常无需手工使用sync命令了。Linux另外有一个后台程序Bdflush,这个程序执行更频繁的但不是全面的同步操作,以避免有时sync的大量磁盘I/O操作所带来的磁盘的突然冻结

    3.  釋放 buffers +cache的內存,一般情況下不需要:

    先 執行 sync, 所有未被写的数据写入磁盘

    釋放前

  [root@test01 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1742       1719         22          0        317        840
-/+ buffers/cache:        561       1180
Swap:         8191          0       8191

  執行 [root@test01 ~]# echo 3 > /proc/sys/vm/drop_caches

  0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所缓存

   釋放后:

   [root@test01 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1742        497       1245          0          0         42
-/+ buffers/cache:        453       1289
Swap:         8191          0       8191

修改回0 :[root@test01 ~]# echo 0 > /proc/sys/vm/drop_caches

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29564184/viewspace-1141537/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29564184/viewspace-1141537/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值