LINUX SWAP分区解疑——为什么物理内存没有用尽,就会产生SWAP

前段时间一直关注MYSQL服务器的交换分区使用情况,发现一种情况,即便物理内存仍有空余,仍会使用交换分区。查阅了很多相关资料,原因慢慢被挖掘出来。

首先,系统使用swap分区,并不意味着系统性能下降。这里分两种情况。

一种情况是:系统在检查系统物理内存使用情况时,发现有部分数据长期没有访问,此时,会发生swap,将这部分数据交换到swap分区中。

另一种情况是:应用程序在申请内存时,发现没有可用的系统内存,此时,也会发生swap,这会立即引起系统的强制数据交换动作,整个系统会变的卡顿,反应很慢。

从以上两种情况不难看出,我们需要避免的是第二种情况。如果,大家想避免第一种情况,让系统尽量不去使用swap分区,可以调整一下linux的内核参数,主要是:

vm.swappiness = 0
vm.dirty_ratio =25
vm.dirty_background_ratio = 10
vm.min_free_kbytes = 1048576

这里提供一个查看swap使用情况的脚本:

#!/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 | grep -v "Swap used: 0"

如果想更深入的了解,推荐另一篇文章:Linux SWAP 深度解读

 

 

你可能感兴趣的:(玩味数据)