導航:首頁 > 操作系統 > linuxswap佔用

linuxswap佔用

發布時間:2022-07-02 13:22:14

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分區被哪些進程佔用實

相信很多的系統管理員可能都遇見過這樣的情況,用登錄一台伺服器,使用free命令查看內存,卻發現swap分區被佔用。那麼到底是什麼進程佔用了這部分swap分區呢?

從2.6.16版本的kernel開始,我們可以使用proc文件系統中的smaps來查找這個問題。下邊是一個列出所有進程佔用swap分區情況的列表。可以通過簡單修改就可以用於統計在/proc/$PID/smaps查出。以下是腳本:

復制代碼 代碼如下:

for
i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk
'/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort
-k2nr

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

Linux系統上可以同時有多個swap,用swapon -s命令可以看到系統上所有的swap,用free命令看到的是swap總的大小。所以swap不夠用時可以再建立一個swap,一般可以用文件的方式建立一個swap空間。下面以1G大小的文件為例介紹如何用文件建立內存交換空間:
1. 使用dd命令在某個目錄(實際使用時換成其他目錄,/tmp目錄的數據會在重啟後丟失)下新建一個1G的文件:
dd if=/dev/zero of=/tmp/swap bs=1M count=1024
解釋:1M是單位,1024是數目,合計1024M就是總大小1G
2. 格式化這個文件為swap格式:(用mkswap命令)
mkswap /tmp/swap
3. 啟動swap,用swapon命令(就是將新建的swap添加到系統):
swapon /tmp/swap
4. 查看效果(用swapon的-s參數):
swapon -s
可以看到所有的swap分區,如果成功了,/tmp/swap必然在裡面。然後再用free命令查看,就可以看到swap空間增加了。

❹ linux下查看哪些進程在佔用swap

1、使用top命令查看當前進程swap佔用
2、使用腳本文件
#!/bin/bash

# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0

done
echo "Overall swap used: $OVERALL"
注意:使用sudo或root許可權來執行該腳本,不然的話非執行用戶的進程的輸出結果為0.

❺ 為什麼linux的swap分區最好設置成內存容量的兩倍,這個倍數是怎麼得出的

這個並沒有硬性的指定你必須使用
物理內存
的2倍來作為交換分區的大小,但是一般的入門讀物裡面都喜歡把這一條列出來,這個其實是和你要載入的程序是有一定關系的,如果你的系統在滿載的時候,就會有一部分程序佔用的內存會被寫入交換分區,當這時你的系統突然down掉的話,可以保證你的swap里有足夠大的地方放下當時內存里的東西來作為後面查詢使用,大概就是這么個意思,如果你是新手設置為2倍物理內存大小的swap是無所謂的,如果你是高手那怎麼設置當然是你自己的事情了

❻ Linux 下查看哪個進程佔用swap空間

相當於Windows下的pagefile!!呵呵呵。是linux下的特殊的文件系統作為交換分區。你可以查看/proc/
swapinfo ,了解你的交換分區信息

❼ 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介紹

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分區比較多

最近有人問,我的系統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交換空間不足怎麼辦

1、使用分區:
在安裝OS時劃分出專門的交換分區,空間大小要事先規劃好,啟動系統時自動進行mount。
這種方法只能在安裝OS時設定,一旦設定好不容易改變,除非重裝系統。
2、使用swapfile:(或者是整個空閑分區)
新建臨時swapfile或者是空閑分區,在需要時設定為交換空間,最多可以增加8個swapfile。
交換空間的大小,與CPU密切相關,在i386系中,最多可以使用2GB的空間。
在系統啟動後根據需要在2G的總容量下進行增減。
這種方法比較靈活,也比較方便,缺點是啟動系統後需要手工設置。
以下是運用swapfile增加交換空間的步驟:
涉及到的命令:

free ---查看內存狀態命令,可以顯示memory,swap,buffer cache等的大小及使用狀況;
dd ---讀取,轉換並輸出數據命令;
mkswap ---設置交換區
swapon ---啟用交換區,相當於mount
swapoff ---關閉交換區,相當於umount
步驟:
1、創建swapfile:
root許可權下,創建swapfile,假設當前目錄為"/",執行如下命令:
# dd if=/dev/zero of=swapfile bs=1024 count=500000
則在根目錄下創建了一個swapfile,名稱為「swapfile」,大小為500M,也可以把文件輸出到自己想要的任何目錄中,
個人覺得還是直接放在根目錄下比較好,一目瞭然,不容易誤破壞,放在其他目錄下則不然了;
命令中選項解釋:

---of:輸出的交換文件的路徑及名稱;
---bs:塊大小,單位byte,一般為1k即1024個byte;
---count:總塊數即空間總大小,單位為塊即k;
---if:讀取的源空閑空間,為什麼是zero,不清楚,先固定這么寫吧;
2、將swapfile設置為swap空間
# mkswap swapfile
3、啟用交換空間,這個操作有點類似於mount操作(個人理解):
# swapon swapfile
至此增加交換空間的操作結束了,可以使用free命令查看swap空間大小是否發生變化;
4、如果不再使用空間可以選擇關閉交換空間,這個操作有點類似於umount操作(個人理解)::
# swapoff swapfile
使用這種方法在每次系統啟動時都需要手動設置、開啟swapfile,比較麻煩,解決方法:
在 /etc/rc.d/rc.local 文件的末行下追加加以下內容:(編輯這個文件當然是用vi了~)
/sbin/swapon /swapfile
保存後退出,這樣在系統啟動後,swap空間就會自動載入了;
總結:在安裝OS時一定要規劃後swap大小,通常為內存的2倍,但是要考慮到以後增加內存的可能,所以可以考慮設的稍大一些,想在虛擬機裡面安裝oracle10g,發現默認的swap交換空間不滿足最低要求,因為我分配的物理內存是1G,那麼就按照要求需要2G的swap交換空間,默認只有1G的交換空間。
添加swap交換空間的步驟如下:
第一步:確保系統中有足夠的空間來用做swap交換空間,我使用的是KVM,准備在一個獨立的文件系統中添加一個swap交換文件,在/opt/image中添加2G的swap交換文件
第二步:添加交換文件並設置其大小為2G,使用如下命令

[root@sense image]# dd if=/dev/zero of=/opt/image/swap bs=1024 count=2048000
過段時間就返回如下結果:
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 272.867 seconds, 7.7 MB/s
第三步:創建(設置)交換空間,使用命令mkswap

[root@sense image]# mkswap /opt/image/swap
Setting up swapspace version 1, size = 2097147 kB
第四步:檢查現有的交換空間大小,使用命令free

[root@sense image]# free -m
total used free shared buffers cached
Mem: 1011 989 21 0 1 875
-/+ buffers/cache: 112 898
Swap: 1027 0 1027
或者檢查meminfo文件
grep SwapTotal /proc/meminfo
第五步:啟動新增加的2G的交換空間,使用命令swapon

[root@sense image]# swapon /opt/image/swap
第六步:確認新增加的2G交換空間已經生效,使用命令free

[[root@sense image]# free -m
total used free shared buffers cached
Mem: 1011 995 15 0 4 877
-/+ buffers/cache: 113 897
Swap: 3027 0 3027
或者檢查meminfo文件
grep SwapTotal /proc/meminfo
第七步:修改/etc/fstab文件,使得新加的2G交換空間在系統重新啟動後自動生效
在文件最後加入:

/opt/image/swap swap swap defaults 0 0
我的操作

[root@weblogic Server]# free
total used free shared buffers cached
Mem: 1785856 1753452 32404 0 38592 1036312
-/+ buffers/cache: 678548 1107308
Swap: 2064376 116 2064260

創建交換空間文件,1000M

[root@weblogic /]# dd if=/dev/zero of=/swapfile bs=1024 count=1000000
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 28.5423 seconds, 35.9 MB/s

[root@weblogic /]# mkswap swapfile
Setting up swapspace version 1, size = 1023995 kB

[root@weblogic /]# swapon swapfile 打開

[root@weblogic /]#swapoff swapfile 關閉

刪除
swapoff swapfile
rm -rf swapfile

閱讀全文

與linuxswap佔用相關的資料

熱點內容
文件夾怎麼做標題 瀏覽:31
騰訊雲伺服器如何防止被攻擊 瀏覽:879
六稜柱的體積演算法 瀏覽:933
淘寶什麼雲伺服器好用 瀏覽:340
pythonoa項目 瀏覽:307
android杜比音效 瀏覽:341
殺手47為什麼連接不了伺服器 瀏覽:108
靜態路徑命令 瀏覽:533
一直編譯不過怎麼辦 瀏覽:829
汽車串聯並聯演算法 瀏覽:458
助眠解壓的聲音音頻小哥哥 瀏覽:277
pythoncmd換行 瀏覽:376
linux取消行號 瀏覽:355
安卓原生系統官網是什麼 瀏覽:444
底部主圖源碼 瀏覽:878
伺服器崩了有什麼提示 瀏覽:780
遠程海康伺服器用什麼瀏覽器 瀏覽:232
解壓報紙圖片 瀏覽:956
python微信公眾號開發平台 瀏覽:895
知識付費網站java源碼 瀏覽:255