ulimit无法限制磁盘I/O,只能管理文件描述符。Linux内核的cgroups可精准控制进程磁盘读写带宽。安装cgroup-tools,创建blkio组,设置读写速度上限(如1MB/s),将进程加入组即可限速。
你是否曾思考过:ulimit 能否限制磁盘 I/O 速度?
实际上,并不能。ulimit 主要用于约束用户进程资源,例如文件描述符数量、进程数、堆栈大小等。但磁盘 I/O 速度并不在其管辖范围之内。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
那么,如何精确控制某个进程的磁盘读写带宽?Linux 内核早已提供了专用于此的组件——cgroups(控制组)。

接下来,我们将逐步演示如何使用 cgroups 限制磁盘 I/O 速度。
大多数现代 Linux 发行版默认未附带 cgroup-tools,需要手动安装。
sudo apt-get install cgroup-tools
sudo yum install libcgroup-tools
安装完成后,创建一个专门用于限速的 cgroup。此处命名为 limited_io,可根据需要自定义。
sudo cgcreate -g blkio:/limited_io
该命令将在 /sys/fs/cgroup/blkio/limited_io 路径下生成一组控制文件。其中 blkio 代表 block I/O,专门用于管理磁盘 I/O。
接下来,向 cgroup 写入限速参数。具体通过 blkio.throttle.read_bps_device 和 blkio.throttle.write_bps_device 两个文件控制每秒读取和写入的字节数。
例如,将磁盘读写速度均限制为 1MB/s,执行以下命令:
echo "8:0 1048576" | sudo tee -a /sys/fs/cgroup/blkio/limited_io/blkio.throttle.read_bps_device
echo "8:0 1048576" | sudo tee -a /sys/fs/cgroup/blkio/limited_io/blkio.throttle.write_bps_device
8:0 为磁盘设备的主次设备号(major:minor)。可通过 lsblk 或 cat /proc/partitions 查看,并替换为实际设备号。
设置完成后,若未生效,则需要将目标进程移入该 cgroup。
查找目标进程的 PID,然后执行:
sudo cgclassify -g blkio:/limited_io
将 替换为实际进程 ID。此操作相当于为进程施加了磁盘读写速度约束,使其被限制在 1MB/s 以内。
如需更改限速值或取消限制,直接修改对应的控制文件即可。例如,重新写入新的限速参数,或清空文件内容。
若需删除整个 cgroup,可使用 cgdelete 命令进行清理。
需要留意的是:cgroups 的功能在不同 Linux 发行版和内核版本上可能存在差异。上述步骤在大多数现代系统中可以正常运行,但若使用特别老旧或高度定制的内核,请根据实际情况调整。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述