Ubuntu共享服务器下限制内存占用的大文件移动复制方法咨询
可行方案整理
使用rsync(推荐,适配大多数场景)
rsync自身内存占用极低,默认不会大量占用系统页缓存,还可同时限制传输速率避免抢占IO资源:
复制操作命令:rsync --bwlimit=50M -a /path/to/source/ /path/to/dest/
移动操作命令(复制完成自动删除源文件,替代跨分区mv):rsync --bwlimit=50M -a --remove-source-files /path/to/source/ /path/to/dest/
参数说明:--bwlimit用来限制传输速率,单位支持K/M/G,可根据服务器负载自行调整,比如设为50M就是最高每秒传输50MB。使用dd命令(适配单大文件复制场景)
通过直接IO参数绕过系统页缓存,完全不占用额外的缓存内存:
基础复制命令:dd if=/path/to/source_file of=/path/to/dest_file bs=1M oflag=direct
限速版命令(需提前安装pv工具):dd if=/path/to/source_file bs=1M | pv -L 50M | dd of=/path/to/dest_file bs=1M oflag=direct
参数说明:oflag=direct表示写入时跳过系统缓存直接落盘,bs=1M表示每次读写的块大小为1MB,可按需调整。使用systemd-run强制限制资源(适配严格资源管控场景)
如果需要更严格的限制进程的内存、IO优先级,可以通过systemd-run启动操作命令:
示例命令:systemd-run --scope -p MemoryMax=200M -p IOWeight=20 cp /path/to/source /path/to/dest
参数说明:MemoryMax=200M限制进程最多占用200MB内存,IOWeight=20设置进程IO优先级(默认值为100,数值越低优先级越低,不会抢占其他进程的IO资源)
额外提示:同一磁盘分区内的mv操作仅修改文件系统元数据,不会触发实际的文件内容读写,本身内存占用极低,无需额外做资源限制。
内容的提问来源于stack exchange,提问作者ylee

