如何進行SWAP知識的理論分析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)專注于海安網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供海安營銷型網(wǎng)站建設,海安網(wǎng)站制作、海安網(wǎng)頁設計、海安網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務,打造海安網(wǎng)絡公司原創(chuàng)品牌,更為您提供海安網(wǎng)站排名全網(wǎng)營銷落地服務。Linux中的交換空間在物理內(nèi)存量(RAM)已滿時使用。
如果系統(tǒng)需要更多內(nèi)存資源,并且RAM已滿,則內(nèi)存中的非活動頁面將移動到交換空間。
雖然交換空間可以幫助具有少量RAM的計算機,但不應將其視為更多RAM的替代品。
交換空間位于硬盤上,硬盤的訪問時間比物理內(nèi)存慢。交換空間可以是專用交換分區(qū)(推薦)、交換文件或交換分區(qū)和交換文件的組合。
Linux內(nèi)核為了提高讀寫效率與速度,會將文件在內(nèi)存中進行緩存,這部分內(nèi)存就是Cache Memory(緩存內(nèi)存)。即使你的程序運行結束后,Cache Memory也不會自動釋放。這就會導致你在Linux系統(tǒng)中程序頻繁讀寫文件后,你會發(fā)現(xiàn)可用物理內(nèi)存變少。當用戶提交程序,然后產(chǎn)生進程,在機器上運行,機器會判斷當前物理內(nèi)存是否還有空閑允許進程調(diào)入內(nèi)存運行,如果有那么則直接調(diào)入內(nèi)存進行運行;如果沒有,那么會根據(jù)優(yōu)先級選擇一個進程掛起,把該進程交換到swap中等待,該程序占用的物理內(nèi)存中的一部分空間就被釋放出來了,然后把新的進程調(diào)入到內(nèi)存中運行。等到那個掛起程序要運行時,再從Swap分區(qū)中恢復保存的數(shù)據(jù)到內(nèi)存中。
但是并不是所有從物理內(nèi)存中交換出來的數(shù)據(jù)都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當一部分數(shù)據(jù)被直接交換到文件系統(tǒng)。例如,有的程序會打開一些文件,對文件進行讀寫(其實每個程序都至少要打開一個文件,那就是運行程序本身),當需要將這些程序的內(nèi)存空間交換出去時,就沒有必要將文件部分的數(shù)據(jù)放到Swap空間中了,而可以直接將其放到文件里去。如果是讀文件操作,那么內(nèi)存數(shù)據(jù)被直接釋放,不需要交換出來,因為下次需要時,可直接從文件系統(tǒng)恢復;如果是寫文件,只需要將變化的數(shù)據(jù)保存到文件中,以便恢復。當物理內(nèi)存和swap都被使用完那么就會報錯out of memory。
Swap被使用的日常例子
在使用Windows系統(tǒng)時,可以同時運行多個程序,當你切換到一個很長時間沒有理會的程序時,會聽到硬盤“嘩嘩”直響。這是因為這個程序的內(nèi)存被那些頻繁運行的程序給“偷走”了,放到了Swap區(qū)中。因此,一旦此程序被放置到前端,它就會從Swap區(qū)取回自己的數(shù)據(jù),將其放進內(nèi)存,然后接著運行。
Swap空間的作用
當系統(tǒng)的物理內(nèi)存不夠用的時候,就需要將物理內(nèi)存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的程序被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數(shù)據(jù)到內(nèi)存中。從這也可以看出swap扮演了一個非常重要的角色,就是暫存被換出的進程。根據(jù)這種換入和換出,實現(xiàn)了內(nèi)存的循環(huán)利用,讓用戶感覺不到內(nèi)存的限制。
Swap分區(qū)對性能的影響
正方:Swap不能代替物理內(nèi)存用!因為swap畢竟還是以磁盤來偽裝成內(nèi)存,交換的操作是磁盤IO的操作而不是內(nèi)存的load與store操作。
反方:正常的情況即物理內(nèi)存還夠的情況下,很少使用swap內(nèi)存區(qū),物理內(nèi)存不夠的情況下,swap空間上存儲的也是系統(tǒng)不會頻繁使用的數(shù)據(jù),調(diào)用的次數(shù)非常少,性能問題幾乎可以忽略,物理內(nèi)存極度不夠的話,性能問題與Swap分區(qū)有啥關系,這時你加多數(shù)Swap分區(qū)也無濟于事,只能加物理內(nèi)存。
使用多大比例內(nèi)存之后開始使用swap
可在/proc/sys/vm/swappiness文件中進行調(diào)整,默認是60。該參數(shù)可以從0-100進行設置。0就是大限度使用內(nèi)存,盡量不使用swap;100就是積極使用swap。A low value means the kernel will try to avoid swapping as much as possible where a higher value instead will make the kernel aggressively try to use swap space
臨時修改swappiness參數(shù)的方法(不能直接vi /proc/sys/vm/swappiness ),重啟后失效
方法1:echo 60 >/proc/sys/vm/swappiness
方法2:sysctl vm.swappiness=60
永久修改swappiness參數(shù)的方法,重啟后生效
修改/etc/sysctl.conf里面的vm.swappiness,可以直接vi /etc/sysctl.conf
開啟關閉swap交換分區(qū)
swapoff /dev/dm-1
swapon /dev/dm-1
swap交換分區(qū)不是tmpfs對應的/dev/shm分區(qū),而是swapon -s對應的Filename的分區(qū)
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4194296 42352 -1
[root@localhost ~]# ll /dev/mapper/VolGroup-lv_swap
lrwxrwxrwx 1 root root 7 6月 27 10:34 /dev/mapper/VolGroup-lv_swap -> ../dm-1
[root@localhost ~]# fdisk -l|grep swap
Disk /dev/mapper/VolGroup-lv_swap: 4294 MB, 4294967296 bytes
[root@localhost ~]# ll /dev|grep dm-1
brw-rw---- 1 root disk 253, 1 6月 27 10:34 dm-1
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 35G 3.6G 30G 11% /
tmpfs 3.9G 72K 3.9G 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/sdb1 197G 100G 87G 54% /db
Swap大小如何確定
CENTOS官網(wǎng)采用如下公式:
M = Amount of RAM in GB
S = Amount of swap in GB,
then If M < 2, S = M *2 Else S = M + 2。
ORACLE的官方文檔推薦
RAM ==>Swap Space
Up to 512 MB ==>2 times the size of RAM
Between 1024 MB and 2048 MB==>1.5 times the size of RAM
Between 2049 MB and 8192 MB==>Equal to the size of RAM
More than 8192 MB ==>0.75 times the size of RAM
查看Swap內(nèi)存的命令
free和swapon -s和cat /proc/swaps三者都可以看到大概的Swap信息
swapon -s和cat /proc/swaps還可以看到Swap對應的磁盤信息
vmstat可以看到間隔時間內(nèi)Swap in、Swap out的大小
[root@localhost ~]# free -k|grep Swap
Swap: 4194296 42352 4151944
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4194296 42352 -1
[root@localhost ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 4194296 42352 -1
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 7872 6580 1292 0 104 1037
-/+ buffers/cache: 5339 2433
Swap: 4095 3241 854
第二行
total = used + free
第三行
(-buffers/cache) used內(nèi)存數(shù):第一部分Mem行中的 used - buffers - cached (反映的是被程序實實在在用掉的內(nèi)存)
(+buffers/cache) free內(nèi)存數(shù): 第一部分Mem行中的 free + buffers + cached (反映的是可以挪用的內(nèi)存總數(shù))
第四行
指SWAP交換分區(qū)
1)如果沒有swap:
swap用了3241M,空閑的物理內(nèi)存是2433M,也就是說,如果沒有swap,內(nèi)存已經(jīng)爆了。
2)swap并沒有影響到性能:
系統(tǒng)還有足夠的物理內(nèi)存(2433M),換句話說,現(xiàn)在swap里存儲的還是不常使用的數(shù)據(jù)(也就是swap正在發(fā)揮正常的作用)。
[root@localhost ~]# vmstat 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 42352 1322484 209984 6182296 0 0 17 21 4 3 0 0 100 0 0
0 0 42352 1322484 209984 6182296 0 0 0 0 42 34 0 0 100 0 0
0 0 42352 1322484 209984 6182296 0 0 0 0 38 36 0 0 100 0 0
0 0 42352 1322484 209984 6182296 0 0 0 0 61 43 0 0 100 0 0
0 0 42352 1322484 209984 6182296 0 0 0 0 34 33 0 0 100 0 0
vmstat 3表示每3秒收集一次
si表示當前(三秒鐘之內(nèi))交換回內(nèi)存(Swap in)的總量,單位為kbytes;
so表示當前(三秒鐘之內(nèi))交換出內(nèi)存(Swap out)的總量,單位為kbytes。
看完上述內(nèi)容,你們掌握如何進行SWAP知識的理論分析的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)-成都網(wǎng)站建設公司行業(yè)資訊頻道,感謝各位的閱讀!