Linux之swap知識整理


Linux查看那些進程用了swap

  如果系統的物理內存用光了,則會用到swap。系統就會跑得很慢,但仍能運行;如果Swap空間用光了,那么系統就會發生錯誤。通常會出現“application is out of memory”的錯誤,嚴重時會造成服務進程的死鎖。所以要高度重視。

swap空間大小:

  通常情況下,Swap空間應大於或等於物理內存的大小,最小不應小於64M,通常Swap空間的大小應是物理內存的2-2.5倍。但根據不同的應用,應有不同的配置:如果是小的桌面系統,則只需要較小的Swap空間,而大的服務器系統則視情況不同需要不同大小的Swap空間。特別是數據庫服務器和Web服務器,隨着訪問量的增加,對Swap空間的要求也會增加,具體配置參見各服務器產品的說明。

swap數量:

  Swap分區的數量對性能也有很大的影響。因為Swap交換的操作是磁盤IO的操作,如果有多個Swap交換區,Swap空間的分配會以輪流的方式操作於 所有的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。如果只有一個交換區,所有的交換操作會使交換區變得很忙,使系統大多數時間處於等待 狀態,效率很低。用性能監視工具就會發現,此時的CPU並不很忙,而系統卻慢。這說明,瓶頸在IO上,依靠提高CPU的速度是解決不了問題的。

方法1:shell腳本

[root@VM_8_35_centos shell]# cat getswap.sh
#!/bin/bash 
# Get current swap usage for all running processes 

function getswap { 
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" 
} 

getswap 
#getswap|egrep -v "Swap used: 0" 

 
[root@VM_8_35_centos shell]# sh swap.sh
PID=1 - Swap used: 0 - (init)
PID=2 - Swap used: 0 - (migration/0)
PID=3 - Swap used: 0 - (ksoftirqd/0)
……………………
PID=30910 - Swap used: 0 - ()
PID=30911 - Swap used: 0 - ()
PID=30912 - Swap used: 0 - ()
Overall swap used: 0

方法2:linux命令

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

如何增大swap空間?

# 查看當前內存
free -g

# 查看交換分區使用情況
swapon -s

# 創建一個分區添加交換文件,創建交換空間,然后啟動新增的交換空間(1G大小)
dd if=/dev/zero of=/data0/swap bs=1024 count=1024000   
/sbin/mkswap /data0/swap
/sbin/swapon /data0/swap

# 再次查看內存情況
free -g

修改/etc/fstab,使新加的2G交換空間在系統重新啟動后自動生效
echo "/opt/temp/swap swap swap defaults 0 0" >>/etc/fstab

如何釋放swap空間?

物理內存接近飽和時,系統會自動將不常用的內存文件轉儲到SWAP中,但SWAP使用率達30%的時候對系統性能可能有一定影響。

對於較大物理內存的VPS或服務器,或根據自己服務器的情況,可以考慮手動關閉或刷新SWAP分區。

sync                         # 先執行下同步
swapoff -a                   # 關閉swap分區
swapon -a                    # 開啟swap分區
swapoff -a && swapon -a      # 刷新swap空間,即將SWAP里的數據轉儲回內存,並清空SWAP里的數據。刷新原理就是把swap關閉后再重啟。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM