在Linux的proc(5)手册页告诉我,/proc/$pid/mem“可用于访问进程的内存的页面”。但是直接尝试使用它只会给我
$ cat /proc/$$/mem /proc/self/mem
cat: /proc/3065/mem: No such process
cat: /proc/self/mem: Input/output error
Run Code Online (Sandbox Code Playgroud)
为什么不能cat打印自己的内存(/proc/self/mem)?当我尝试打印 shell 的内存时,这个奇怪的“没有这样的进程”错误是什么(/proc/$$/mem显然进程存在)?那我怎么读/proc/$pid/mem呢?
不知何故,我碰巧换掉了 14 GB 的内存。杀了罪魁祸首后,我又有了大量的空闲内存,所以我想我可以再把重要的数据带进来。因此,使用了 32 GB 中的 5 GB 和使用了 14 GB 的交换空间,我跑了swapoff -a…… 4 小时后,大约一半的工作完成了。
这意味着少于 1 MB/s,而我可以轻松复制 200 MB/s。我的交换是加密的,但所有普通分区也是如此,使用aes-ni它不会导致明显的 CPU 负载(填充交换空间只需要几分钟)。我看到优化没有特殊原因swapoff,但是我想知道它怎么会变慢?
只需添加更多数据:我的主内存是 32 GB,我在 4 个硬盘中的每一个上都有 32 GB 的交换空间(当然是矫枉过正,但谁在乎?)。整个交换空间可以在不到 5 分钟的时间内被(解密和)读取:
time -p sudo sh -c 'for i in /dev/mapper/cryptswap?; do md5sum $i & done; wait'
014a2b7ef300e11094134785e1d882af /dev/mapper/cryptswap1
a6d8ef09203c1d8d459109ff93b6627c /dev/mapper/cryptswap4
05aff81f8d276ddf07cf26619726a405 /dev/mapper/cryptswap3
e7f606449327b9a016e88d46049c0c9a /dev/mapper/cryptswap2
real 264.27
Run Code Online (Sandbox Code Playgroud)
读取分区的一部分不会比读取全部更慢。然而,阅读大约 1/10 的时间需要大约 100 倍的时间。
我观察到,在swapoffCPU 大部分时间都处于空闲状态(可能是一个内核的 10%),磁盘也是如此(由 LED“测量”)。我还看到交换空间一个接一个关闭。
有时,我们希望暂停 Ubuntu 和 OS X 服务器上的内存密集型进程,以暂时释放一些 RAM 用于其他作业。如果我们担心的只是 CPU 使用率,那么简单的方法Ctrl-Z就行了。但是,我们需要能够释放 RAM(通过将其写入磁盘)然后重新启动进程(磁盘 -> RAM)或换句话说“休眠”单个进程。关于如何做到这一点的任何线索?(最好来自 CLI。)谢谢。
我使用 Linux 机器进行大量计算工作,有时特定的计算会占用大量 RAM。当我完成后,我最终会得到一堆已使用的交换空间和一堆可用内存,如果我像往常一样继续我的业务,机器上的所有其他进程都会有点滞后,直到它们被交换回来.如果有一个命令可以将所有内容快速分页回 RAM,这样我就可以运行它,然后起身去使用洗手间或其他东西,当我回来时,一切都会再次变得很快,这似乎会很好。 。
我发现这个问题表明你可以完成这个(至少在 Linux 上)
sudo swapoff -a
sudo swapon -a
Run Code Online (Sandbox Code Playgroud)
但当我尝试这样做时,它需要很长时间- 它只能以 2-5 MB/秒的速度释放交换,这远远低于它应有的能力,而且似乎不值得。这是正常的吗?有没有办法加快这个过程,使其在“去洗手间”的时间而不是“出去吃午饭”的时间运行?