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