linux交换区自动释放么,linux – 交换事件后立即释放交换空间

我使用我的Linux机器进行大量的计算工作,有时特定的计算会占用大量的RAM.当我完成后,我最终会使用一堆交换和一堆可用内存,如果我照常开展我的业务,​​那么机器上的所有其他进程都会有点滞后,直到它们被换回来如果有一个命令可以快速将所有东西都重新放回RAM中,那么好像我可以运行它然后站起来去使用洗手间或其他什么东西,当我回来时一切都会很快.

我发现this question表明你可以完成这个(至少在Linux上)

sudo swapoff -a

sudo swapon -a

但是,当我尝试它时,它需要永远 – 它只能以2-5 MB /秒的速率释放交换,这比它应该能够的少,并且几乎不值得.这是正常的吗?有没有办法加快这个过程,以便它在“去洗手间”时间而不是“外出吃午饭”的时间运行?

解决方法:

我最近遇到了同样的问题,并创建了这个来快速清理掉掉:

#Single-proc function to core-dump swapped ranges > 1M to /dev/null

unswap(){ (awk -F'[ \t-]+' '/^[a-f0-9]*-[a-f0-9]* /{recent="0x"$1" 0x"$2}/Swap:/&&$2>1000{print recent}' /proc/$1/smaps | while read astart aend; do gdb --batch --pid $1 -ex "dump memory /dev/null $astart $aend" &>/dev/null; done&)2>/dev/null;};

#Loop to run unswap on the top 20 swap-consuming processes

grep VmSwap /proc/*/status 2>/dev/null | sort -nk2 | tail -n20 | cut -d/ -f3 | while read line; do unswap $line; done;

#Observe the number of core dumps currently running, along with free swap, over time.

echo "Dumps Free(m)"; rcount=10; while [[ $rcount -gt 0 ]]; do rcount=$(ps fauxww | grep "dump memory" | grep -v grep | wc -l); echo "$rcount $(free -m | awk '/Swap/{print $4}')"; sleep 1; done

如果这在您的特定环境中不起作用,则过程如下:

1.获取消耗最多交换的进程列表.

在我的情况下,我正在检查/ proc / $pid / status,在VmSwap行中使用交换.

# grep VmSwap /proc/*/status 2>/dev/null | sort -nk2 | tail -n5

/proc/22457/status:VmSwap: 3780 kB

/proc/22684/status:VmSwap: 4260 kB

/proc/7408/status:VmSwap: 4396 kB

/proc/31992/status:VmSwap: 9176 kB

/proc/2967/status:VmSwap: 60840 kB

2.对于高交换过程,我发现内存地址范围是交换使用最多的.

我从/ proc / $pid / smaps得到这个:

7f2fd1bc4000-7f2fd1d24000 rw-p 00000000 00:00 0 <<< Address range

Size: 1408 kB

Rss: 900 kB

Pss: 900 kB

Shared_Clean: 0 kB

Shared_Dirty: 0 kB

Private_Clean: 0 kB

Private_Dirty: 900 kB

Referenced: 4 kB

Anonymous: 900 kB

AnonHugePages: 0 kB

Swap: 508 kB << Swap used

KernelPageSize: 4 kB

MMUPageSize: 4 kB

3.我使用gdb直接将这些地址范围的核心转储到/ dev / null

这会强制系统访问该内存并将其从交换中取出.转到/ dev / null可以避免不必要的IO.

gdb --batch --pid $pid -ex "dump memory /dev/null $astart $aend"

我之前提到的过程最初省略了使用少于1M交换的任何内存区域,以便以相当少的核心转储获得大部分交换,但这不是强制性的.

标签:linux,swap

来源: https://codeday.me/bug/20190815/1659046.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值