昨天,我将一个 8 GB 的文件复制到 USB,写入速度很慢,只有 7 MB/s,而我的 RAM 是 3 GB。复制时系统冻结,甚至无法移动光标。
我设法登录到文本控制台并运行iotop
,它显示名为的进程kswapd0
占用了 99.99% 的 IO。
有没有解决方法,使复制大文件不会导致我的系统无法使用?
答案1
根据此错误报告我解决了它添加以下几行
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
进入 /etc/sysctl.conf
并运行
sudo sysctl -p
答案2
答案3
我遇到了类似的问题,复制到闪存驱动器时系统会冻结。我提交了一份有关此问题的错误报告:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1267648
解决方法是,我发现禁用交换可以完全消除该问题。
答案4
我在 ubuntu 19.10 上遇到了完全相同的问题(2019 年),当时我正在将大量文件从 USB 磁盘复制到 SATA 磁盘。两个文件系统都是 ext4。当我关闭交换时,问题就消失了。这看起来像是磁盘缓冲区的内存分配中的一些错误 - 显然,内核在这种情况下会尝试为磁盘缓冲区分配尽可能多的内存,这是没有意义的(在交换中创建磁盘缓冲区...),或者它只是错误地计算了可用于缓存的内存大小...
正如有人指出的那样,将 swappiness 设置为 1 并不能解决问题,这是合乎逻辑的,如果您复制的文件的总大小大于 RAM 大小......
顺便问一句 - 有人能解释一下,为什么不建议关闭交换吗?如果我有 32GB 的 RAM,再添加 4GB 的交换有什么区别?我只能想到一些实际上希望交换存在的晦涩应用程序。但我会停止使用这样的应用程序,因为正确编写的应用程序不应该关心交换。交换应该只在操作系统级别进行管理......