導航:首頁 > 操作系統 > linux釋放swap

linux釋放swap

發布時間:2022-06-22 08:31:12

linux如何查看哪個進程佔用的SWAP分區比較多

最近有人問,我的系統swap快被耗盡了,可是卻不知道哪些程序佔用了swap,到處發帖問什麼命令可以查看。其實linux系統目前並沒有這樣的命令(或許是有,但我孤陋寡聞不清楚),但是我們可以通過編寫腳本來自己找出佔用swap的程序。
那麼怎樣編寫這個腳本呢,首先、我們需要知道去哪查看進程佔用資源的情況。每個進程都會在/proc下面生成一個以進程號為名字的目錄,裡面的各個文件就是其在內存中的映像。
其中smaps這個文件,便記載了每個進程每個數據段佔用內存的情況。
如下是某佔用swap的進程的smaps文件截圖(部分):

Swap: 後面的數字,就是該數據段佔用的swap大小,我們只要把這個文件里所有出現的swap加起來,就是這個進程所佔用的swap大小了。
OK,下面開始寫代碼:

點擊(此處)折疊或打開
#!/bin/bash

###############################################################################
# 日期 : 2011-10-31
# 作者 : xiaoxi227
# Email : [email protected]
# QQ : 543928910
# 版本 : 1.0
# 腳本功能 : 列出正在佔用swap的進程。
# 調用關系 :
# 其他說明 :
###############################################################################

echo -e "PID\t\tSwap\t\tProc_Name"

# 拿出/proc目錄下所有以數字為名的目錄(進程名是數字才是進程,其他如sys,net等存放的是其他信息)
for pid in `ls -l /proc | grep ^d | awk '{ print $9 }'| grep -v [^0-9]`
do
# 讓進程釋放swap的方法只有一個:就是重啟該進程。或者等其自動釋放。
# 如果進程會自動釋放,那麼我們就不會寫腳本來找他了,找他都是因為他沒有自動釋放。
# 所以我們要列出佔用swap並需要重啟的進程,但是init這個進程是系統里所有進程的祖先進程
# 重啟init進程意味著重啟系統,這是萬萬不可以的,所以就不必檢測他了,以免對系統造成影響。
if [ $pid -eq 1 ];then continue;fi # Do not check init process
# 判斷改進程是否佔用了swap
grep -q "Swap" /proc/$pid/smaps 2>/dev/null
if [ $? -eq 0 ];then # 如果佔用了swap
swap=$(grep Swap /proc/$pid/smaps \ # 佔用swap的總大小(單位:KB)
| gawk '{ sum+=$2;} END{ print sum }')
proc_name=$(ps aux | grep -w "$pid" | grep -v grep \ # 進程名
| awk '{ for(i=11;i<=NF;i++){ printf("%s ",$i); }}')
if [ $swap -gt 0 ];then # 如果佔用了swap則輸出其信息
echo -e "$pid\t${swap}\t$proc_name"
fi
fi
done | sort -k2 -n | gawk -F'\t' '{ # 按佔用swap的大小排序,再用awk實現單位轉換。
# 如:將1024KB轉換成1M。將1048576KB轉換成1G,以提高可讀性。
pid[NR]=$1;
size[NR]=$2;
name[NR]=$3;
}
END{
for(id=1;id<=length(pid);id++)
{
if(size[id]<1024)
printf("%-10s\t%15sKB\t%s\n",pid[id],size[id],name[id]);
else if(size[id]<1048576)
printf("%-10s\t%15.2fMB\t%s\n",pid[id],size[id]/1024,name[id]);
else
printf("%-10s\t%15.2fGB\t%s\n",pid[id],size[id]/1048576,name[id]);
}
}'

本人在某台已佔用swap的伺服器執行的結果如下:

圖片有刪減(為方便閱讀)
腳本執行結果一目瞭然,如果某程序佔用了大量的swap,則重啟該進程即可。否則時間長了,很可能會因為swap耗盡而導致系統死機。

❷ linux中swap是什麼意思

交換分區

❸ Linux查看佔用swap的進程腳本

linux查看佔用swap的進程腳本01#!/bin/bash0203##############################################################################04#
腳本功能

列出正在佔用swap的進程。05###############################################################################0607echo
-e
PID/t/tSwap/t/tProc_Name0809#
拿出/proc目錄下所有以數字為名的目錄(進程名是數字才是進程,其他如sys,net等存放的是其他信息)10for
pid
in
`ls
-l
/proc
|
grep
^d
|
awk
'{
print
$9
}'|
grep
-v
[^0-9]`11do12
#
讓進程釋放swap的方法只有一個:就是重啟該進程。或者等其自動釋放。放13
#
如果進程會自動釋放,那麼我們就不會寫腳本來找他了,找他都是因為他沒有自動釋放。14
#
所以我們要列出佔用swap並需要重啟的進程,但是init這個進程是系統里所有進程的祖先進程15
#
重啟init進程意味著重啟系統,這是萬萬不可以的,所以就不必檢測他了,以免對系統造成影響。16
if
[
$pid
-eq
1
];then
continue;fi17
grep
-q
Swap
/proc/$pid/smaps
2>/dev/null18
if
[
$?
-eq
0
];then19
swap=$(grep
Swap
/proc/$pid/smaps
/20
|
gawk
'{
sum+=$2;}
END{
print
sum
}')21
proc_name=$(ps
aux
|
grep
-w
$pid
|
grep
-v
grep
/22
|
awk
'{
for(i=11;i<=NF;i++){
printf(%s
,$i);
}}')23
if
[
$swap
-gt
0
];then24
echo
-e
${pid}/t${swap}/t${proc_name}25
fi26
fi27done
|
sort
-k2
-n
|
awk
-F'/t'
'{28
pid[NR]=$1;29
size[NR]=$2;30
name[NR]=$3;31}32END{33
for(id=1;id<=length(pid);id++)34
{35
if(size[id]<1024)36
printf(%-10s/t%15sKB/t%s/n,pid[id],size[id],name[id]);37
else
if(size[id]<1048576)38
printf(%-10s/t%15.2fMB/t%s/n,pid[id],size[id]/1024,name[id]);39
else40
printf(%-10s/t%15.2fGB/t%s/n,pid[id],size[id]/1048576,name[id]);41
}42}'

❹ linux 清理交換區SWAP,對正在伺服器上運行的其它應用有什麼影響

SWAP其實就是突發內存,也被稱作虛擬內存

如圖是真實的內存條,SWAP是從硬碟劃分過來,當作突發內存用的。當應用程序技術量過大的時候,會把一些運算放到SWAP里進行

所以如果SWAP內存有正在運行的程序,清理SWAP就會造成錯誤,所以在運行程序的時候不要清理SWAP分區

❺ linux swap分區原理

swap介紹

Swap,即交換區,除了安裝Linux的時候,有多少人關心過它呢?其實,Swap的調整對Linux伺服器,特別是Web伺服器的性能至關重要。通過調整Swap,有時可以越過系統性能瓶頸,節省系統升級費用。

本文內容包括:

Swap基本原理

突破128M Swap限制

Swap配置對性能的影響

Swap性能監視

有關Swap操作的系統命令

Swap基本原理

Swap的原理是一個較復雜的問題,需要大量的篇幅來說明。在這里只作簡單的介紹,在以後的文章中將和大家詳細討論Swap實現的細節。

眾所周知,現代操作系統都實現了「虛擬內存」這一技術,不但在功能上突破了物理內存的限制,使程序可以操縱大於實際物理內存的空間,更重要的是,「虛擬內存」是隔離每個進程的安全保護網,使每個進程都不受其它程序的干擾。

Swap空間的作用可簡單描述為:當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。

計算機用戶會經常遇這種現象。例如,在使用Windows系統時,可以同時運行多個程序,當你切換到一個很長時間沒有理會的程序時,會聽到硬碟「嘩嘩」直響。這是因為這個程序的內存被那些頻繁運行的程序給「偷走」了,放到了Swap區中。因此,一旦此程序被放置到前端,它就會從Swap區取回自己的數據,將其放進內存,然後接著運行。

需要說明一點,並不是所有從物理內存中交換出來的數據都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當一部分數據被直接交換到文件系統。例如,有的程序會打開一些文件,對文件進行讀寫(其實每個程序都至少要打開一個文件,那就是運行程序本身),當需要將這些程序的內存空間交換出去時,就沒有必要將文件部分的數據放到Swap空間中了,而可以直接將其放到文件里去。如果是讀文件操作,那麼內存數據被直接釋放,不需要交換出來,因為下次需要時,可直接從文件系統恢復;如果是寫文件,只需要將變化的數據保存到文件中,以便恢復。但是那些用malloc和new函數生成的對象的數據則不同,它們需要Swap空間,因為它們在文件系統中沒有相應的「儲備」文件,因此被稱作「匿名」(Anonymous)內存數據。這類數據還包括堆棧中的一些狀態和變數數據等。所以說,Swap空間是「匿名」數據的交換空間。

突破128M Swap限制

經常看到有些Linux(國內漢化版)安裝手冊上有這樣的說明:Swap空間不能超過128M。為什麼會有這種說法?在說明「128M」這個數字的來歷之前,先給問題一個回答:現在根本不存在128M的限制!現在的限制是2G!

Swap空間是分頁的,每一頁的大小和內存頁的大小一樣,方便Swap空間和內存之間的數據交換。舊版本的Linux實現Swap空間時,用Swap空間的第一頁作為所有Swap空間頁的一個「位映射」(Bit map)。這就是說第一頁的每一位,都對應著一頁Swap空間。如果這一位是1,表示此頁Swap可用;如果是0,表示此頁是壞塊,不能使用。這么說來,第一個Swap映射位應該是0,因為,第一頁Swap是映射頁。另外,最後10個映射位也被佔用,用來表示Swap的版本(原來的版本是Swap_space ,現在的版本是swapspace2)。那麼,如果說一頁的大小為s,這種Swap的實現方法共能管理「8 * ( s - 10 ) - 1」個Swap頁。對於i386系統來說s=4096,則空間大小共為133890048,如果認為1 MB=2^20 Byte的話,大小正好為128M。

之所以這樣來實現Swap空間的管理,是要防止Swap空間中有壞塊。如果系統檢查到Swap中有壞塊,則在相應的位映射上標記上0,表示此頁不可用。這樣在使用Swap時,不至於用到壞塊,而使系統產生錯誤。

現在的系統設計者認為:

❻ linux什麼情況就會使用到交換區swap,比如剩下多少內存,還有其他哪些因素

交換區可是看作是內存的一部分,只是它是從硬碟中劃分出來的。 它像windows下的虛擬內存。
它的作用是緩存數據。 劃分它時,大小設成你的物理內存的大小的兩倍。
當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。 其實,Swap的調整對Linux伺服器,特別是Web伺服器的性能至關重要。通過調整Swap,有時可以越過系統性能瓶頸,節省系統升級費用。

❼ Linux下如何釋放內存,swap分區滿了怎麼辦

swap的作用可簡單描述為:當內存不夠用時,將存儲器中的數據塊從DRAM移到swap的磁碟空間中,以釋放更多的空間給當前進程使用.
當再次需要那些數據時,就可以將swap磁碟中的數據重新移到內存,而將那些不用的數據塊從內存移到swap中.
2)數據從內存移動交換區的行為被稱為頁面調用,發生在後台的頁面調用沒有來自應用程序的干涉.
3)swap空間是分頁的,每一頁的大小和內存頁的大小一樣.
4)並不是一定要給每個系統劃分SWAP,比如大多數的嵌入式就沒有swap.

##在執行以上操作以後,查看你的swap分區還是滿了,你首先查看一下你實際的內存剩多少空間,然後在查看自己的swap空間用了多少,首先提前保證實際剩餘的內存比你的swap的內存的空間要大,然後執行一下操作,否則會宕機的!
首先我們停掉swap分區,查看swap分區
swapon -s 會查看到你的swap分區是掛在哪裡!
然後比如說我的是掛到/dev/sda2
swapoff /dev/sda2
停止是需要一段時間的,因為他會把內存釋放到實際內存當中,
然後在啟動我們的swap分區
swapon -a
我們的swap分區內存已經成功釋放到了實際內存當中!

❽ 如何解決Linux系統Swap耗盡問題

除非老機子,新機子,一般都不需要SWAP交換分區了.如果是老機子,參考如下解決方法:
1、啟動應用時報內存不足,直接Linux命令行top查看下。swap used100%,0free。

2、reboot伺服器能有效的釋放swap,可是很多情況下是不能重啟伺服器的。這時就要弄明白是什麼占著內存。查看下/proc目錄下內容,發現很多數字命名的目錄,這些就是Linux的進程了。

3、要讓進程釋放swap的方法只有kill掉該進程了。寫個腳本來查看具體是哪些進程占著內存啦。
一、對/proc目錄下所有以數字為名的目錄進行遍歷
二、1目錄是根進程重啟會導致系統重啟,所以直接排除掉。
三、算出每個進程佔用內存的大小,然後按照大小排序
四、輸出內存佔用大於1MB的進程
4、將運行結果保存到swap.log文件中

5、查看swap.log.10325這個進程內存佔用最多有130幾M。

6、直接kill掉,然後再top查看。ok,swap一下子釋放了很多,搞定。

❾ 如何管理配置 Linux下Swap交換分區

理解什麼是swap分區

Swap是Linux下的虛擬內存分區,他的主要作用是在物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,讓當前的程序來使用,這些內存釋放出來的空間沒有什麼操作的程序,這些釋放的內存將被保存到swap空間中,等到這寫程序在運行的時候,再從swap虛擬空間來讀取這些程序給內存來使用。這樣中是在系統內存不夠用的時候,進行交換。在針對Linux web伺服器的時候,調整swap能提高系統很大的性能。

現在操作系統都突破了物理內存的限制,讓程序可以操作大於物理內存的空間,虛擬內存想防火牆一樣,讓每個進程不受其他程序的干擾。

我們需要注意的是不是所以的物理內存數據都會被交換到swap中的,要是所有的內存都放在swap中肯的是不可能的,所以有一部分直接交換到文件系統。當這文件讀取的時候,直接從文件系統調用不從swap調用程序文件。

早期的時候經常看見說swap不能超過128M,現在我們的伺服器一般不存在這種問題最大可以swap到2048M的.swap空間文件的結構是分頁的每一頁的大小和內存頁的大小是一樣的,這樣的好處是方便swap空間和內存之間的交換,舊版本的Linux實現Swap空間時,用Swap空間的第一頁作為所有Swap空間頁的一個「位映射」。這就是說第一頁的每一位,都對應著一頁Swap空間。如果這一位是1,表示此頁Swap可用;如果是0,表示此頁是壞塊,不能使用。這么說來,第一個Swap映射位應該是0,因為,第一頁Swap是映射頁。

所以取消了Linux映射的方法。

一般創建swap有兩種方法

第一種方法是在創建系統的時候添加swap分區

還有一種是在系統創建完之後再創建swap分區,或者創建臨時的swap。我們需要注意的是,在創建系統的時候我們沒有swap分區也是能正常安裝部署系統的,只是當系統文件調用swa文件的的時候會發生錯誤,所以我們需要swap不是沒有swap不一定能啟動起來系統。

查看當前swap資源的使用情況:

Swapon –s free –m

❿ 如何清理Linux中的swap,buffer及cache

使用 Furius ISO Mount 軟體,該方法的優點是無需記住以上命令,也無需輸入用戶密碼提權,推薦大家使用。首先安裝 Furius ISO Mount,Ubuntu 用戶可在 Ubuntu 軟體中心搜索安裝,或者在終端中輸入sudo apt-get
install furiusisomount。
其他 Linux 發行版請使用相應軟體包管理器安裝或自行編譯安裝。

註:由於許可權問題,部分發行版(Ubuntu 用戶無需進行此操作)可能需要將用戶添加到 fuse 組,執行sudo adser username
fuse即可。

閱讀全文

與linux釋放swap相關的資料

熱點內容
linuxssh互信 瀏覽:286
支持128加密的瀏覽器 瀏覽:290
程序員下載器 瀏覽:48
退出雲伺服器代碼 瀏覽:900
軍狀如命令 瀏覽:263
如何安卓系統更新 瀏覽:74
linux命令在哪裡輸入 瀏覽:497
編程語言集合類怎麼選 瀏覽:93
如何將pdf轉化為word 瀏覽:11
邁克菲隔離區解壓密碼 瀏覽:785
怎麼用偉福編譯 瀏覽:867
計算機演算法專家 瀏覽:501
什麼app清理垃圾 瀏覽:643
android流媒體伺服器 瀏覽:183
各種演算法的時間復雜度是指 瀏覽:116
幫助高考生緩解壓力 瀏覽:850
自媒體聚合APP需要什麼資質 瀏覽:487
求標准體重的演算法 瀏覽:740
伺服器後面插光纖的卡是什麼卡 瀏覽:526
低級格式化命令dos 瀏覽:87