相关疑难解决方法(0)

如何将所有正在运行的应用程序从交换空间重新加载到 RAM 中?

如果我的桌面内存不足并且交换了很多,那么我会释放或杀死浪费我 RAM 的应用程序。但是,在那之后,我所有的桌面/应用程序都被交换了并且速度非常慢,你知道一种“取消交换”(从交换空间重新加载到内存中)我的桌面/应用程序的方法吗?

linux desktop memory swap

21
推荐指数
3
解决办法
2万
查看次数

为什么 swapoff 这么慢?

我相信我的交换/硬件/驱动程序发生了一些奇怪的事情。

我正在尝试将交换大小增加swapoff, lvresize,然后swapon再次增加。

当我这样做时swapoff /dev/swapdev,该命令花了 8 分 19 秒将大约 3.5GB 的交换页面移动到内存中。

在运行之前swapoff,我确保我的空闲 RAM 大于交换使用量,并且在运行时保持正确。

我有一台带有 SSD HDD 的 Intel Core i5 笔记本电脑。处理器之前不到 10% swapoff,而当我签入时,swapoff正在使用 70%+ CPU。

一直以来,杂志上都没有什么有趣的东西。

以下是我预计将 3.5G 从磁盘分流到内存所需的时间:

$ time dd if=/dev/urandom of=/tmp/del bs=1M count=3500
3500+0 records in
3500+0 records out
3670016000 bytes (3.7 GB, 3.4 GiB) copied, 23.7288 s, 155 MB/s

real    0m24.789s
user    0m0.000s
sys     0m22.743s
Run Code Online (Sandbox Code Playgroud)

我在跑 Linux svelte 4.9.53-1-MANJARO #1 SMP PREEMPT Thu …

linux swap

12
推荐指数
1
解决办法
6503
查看次数

将进程的所有交换内存从交换中拉出

如何在不写入磁盘的情况下快速将进程的所有交换内存从交换中拉出?

这个问题的背景是微不足道的,因为需要这个问题的系统性问题正在由其他各方处理。但是,现在,我遇到了一个问题,我经常不得不在负载和 IO 等待非常高的情况下释放 OpenVZ 节点上的交换空间。

交换通常主要由运行在单个容器上的少数 MySQL 和 clamd 进程消耗。重新启动这些服务可以释放交换并解决节点上的问题,但由于显而易见的原因,这是不可取的。

我正在寻找一种方法,当节点过载并且需要比我当前的方法更快的东西时,可以快速从这些进程中释放交换:

unswap(){ [[ $1 && $(ls /proc/$1/maps) ]]  && ((gcore -o /tmp/deleteme $1 &>/dev/null; rm -fv /tmp/deleteme.$1)&) 2>/dev/null  || echo "must provide valid pid";};unswap
Run Code Online (Sandbox Code Playgroud)

此核心转储强制访问所有 ram,从而完成将其从交换区中拉出的工作,但我尚未找到避免将其写入文件的方法。此外,如果我可以隔离当前交换的地址范围并将该部分转储到 /dev/null,该过程似乎会更快,但我还没有找到一种方法来做到这一点。

这是一个巨大的节点,所以通常的 swapoff/swapon 方法非常耗时,而且节点的配置不在我的控制之下,所以修复根本原因不是这个问题的一部分。但是,任何有关如何在不杀死/重新启动任何东西的情况下快速释放大部分交换的见解将不胜感激。

环境:CentOS 6.7/OpenVZ

稍后可能会偶然发现此问题的任何人的更新:

使用 Jlong 的输入,我创建了以下函数:

unswap(){ (awk -F'[ \t-]+' '/^[a-f0-9]*-[a-f0-9]* /{recent="0x"$1" 0x"$2}/Swap:/&&$2>0{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;};
Run Code Online (Sandbox Code Playgroud)

它有点慢,但完全按照这里的要求执行。可能可以通过仅查找交换中的最大地址范围并省略微不足道的小区域的迭代来提高速度,但前提是合理的。

工作示例:

#Find the process with …
Run Code Online (Sandbox Code Playgroud)

process centos swap openvz

10
推荐指数
1
解决办法
1389
查看次数

交换事件后立即释放交换空间

我使用 Linux 机器进行大量计算工作,有时特定的计算会占用大量 RAM。当我完成后,我最终会得到一堆已使用的交换空间和一堆可用内存,如果我像往常一样继续我的业务,​​机器上的所有其他进程都会有点滞后,直到它们被交换回来.如果有一个命令可以将所有内容快速分页回 RAM,这样我就可以运行它,然后起身去使用洗手间或其他东西,当我回来时,一切都会再次变得很快,这似乎会很好。 。

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

sudo swapoff -a
sudo swapon -a
Run Code Online (Sandbox Code Playgroud)

但当我尝试这样做时,它需要很长时间- 它只能以 2-5 MB/秒的速度释放交换,这远远低于它应有的能力,而且似乎不值得。这是正常的吗?有没有办法加快这个过程,使其在“去洗手间”的时间而不是“出去吃午饭”的时间运行?

linux swap

5
推荐指数
1
解决办法
1453
查看次数

标签 统计

swap ×4

linux ×3

centos ×1

desktop ×1

memory ×1

openvz ×1

process ×1