Linux下如何故意减慢不可修改程序的运行速度?
Linux下不修改程序减慢进程速度的方法(适配inotifywait事件捕获)
针对你遇到的目标程序运行过快导致inotifywait无法捕获文件事件的问题,以下是几种无需修改程序本身就能减慢进程速度的Linux工具方案:
1. 用cpulimit强制限制CPU使用率
这是最直接的方法,通过限制进程能使用的CPU时间占比来减慢程序运行:
- 先安装工具:
Debian/Ubuntu系:sudo apt install cpulimit
RHEL/CentOS系:sudo yum install cpulimit - 两种使用方式:
- 启动程序时直接限制:
sudo cpulimit -e 你的程序名 -l 20(-l后接CPU使用率百分比,示例为20%) - 给已运行的进程限制:先通过
ps aux | grep 你的程序名获取PID,再执行sudo cpulimit -p 进程PID -l 20
- 启动程序时直接限制:
2. 用nice/renice调整进程优先级
通过降低进程的CPU调度优先级,让系统更少分配CPU时间给它:
- 启动时设置低优先级:
nice -n 19 你的程序名(-n后的数值范围是-20到19,数值越大优先级越低) - 调整已运行进程的优先级:
sudo renice 19 -p 进程PID - 注意:该方法效果受系统负载影响,当系统空闲时,低优先级进程仍可能占用较多CPU,适合配合其他方法使用。
3. 用strace给指定系统调用加延迟
如果只想针对文件创建操作(比如mkdir)减慢速度,不影响程序其他逻辑,strace是最优选择:
- 直接启动程序并给
mkdir系统调用加延迟:strace -e trace=mkdir --delay=0.1 -f 你的程序名-e trace=mkdir:只跟踪mkdir系统调用--delay=0.1:每次mkdir调用后添加0.1秒的延迟-f:跟踪进程的子进程(如果你的程序会创建子进程执行文件操作)
4. 用cgroup(控制组)精细限制资源
这是更专业的资源管控方法,可同时限制CPU、内存等多种资源,适合长期需要限制的场景:
- 以CPU限制为例(限制进程使用10%的CPU):
- 创建CPU控制组:
sudo mkdir /sys/fs/cgroup/cpu/slowdown - 设置CPU配额:
sudo echo 100000 > /sys/fs/cgroup/cpu/slowdown/cpu.cfs_quota_us(1000000微秒对应100%CPU,100000即10%) - 将目标进程加入该控制组:
sudo echo 进程PID > /sys/fs/cgroup/cpu/slowdown/cgroup.procs
- 创建CPU控制组:
- 用完后可删除控制组:
sudo rmdir /sys/fs/cgroup/cpu/slowdown
以上方法均无需修改目标程序代码,完全符合你的限制条件。其中strace的延迟方案精准针对文件操作,最适配你解决inotifywait事件捕获的需求;cpulimit则操作简单,适合全局减慢程序运行。
内容的提问来源于stack exchange,提问作者Cymmer Maranga
相关产品推荐
相关产品推荐

