在Debian系统上,想给Node.js应用来个“资源紧箍咒”?cgroups(控制组)就是那个趁手的工具。它是Linux内核自带的功能,能限制、监控和分配进程组的CPU、内存、磁盘I/O等资源,而且配置起来并不复杂。下面直接上步骤,跟着操作就行。
- 安装cgroup工具
Debian系统默认没有cgroups的管理工具,需要先装个cgroup-tools包。打开终端,跑两行命令:
sudo apt-get update
sudo apt-get install cgroup-tools
- 创建一个新的cgroup
创建一个叫nodejs的cgroup,后续就把Node.js应用扔进去,统一管理。命令如下:
sudo cgcreate -g memory,cpu:/nodejs
这条命令会创建一个同时包含内存和CPU控制器的cgroup,名字就叫nodejs。
- 限制内存使用
假设你想把Node.js应用的内存上限设为512MB,那就在刚才创建的cgroup里写个限制值。注意,这里需要以字节为单位,所以512MB = 536870912字节:
echo "536870912" | sudo tee /sys/fs/cgroup/memory/nodejs/memory.limit_in_bytes
- 限制CPU使用
CPU限制需要设置两个参数:cpu.cfs_quota_us(配额)和cpu.cfs_period_us(周期)。比如想让应用最多用50%的CPU,可以这样配:
echo "50000" | sudo tee /sys/fs/cgroup/cpu/nodejs/cpu.cfs_quota_us
echo "100000" | sudo tee /sys/fs/cgroup/cpu/nodejs/cpu.cfs_period_us
这里cpu.cfs_quota_us是50000微秒,cpu.cfs_period_us是100000微秒,比例正好50%。
- 将Node.js应用添加到cgroup
先找到Node.js应用的进程ID(PID)。可以用ps或pgrep,比如:
pgrep -f nodejs_app.js
假设PID是12345,用cgclassify把它加到nodejs组里:
sudo cgclassify -g memory,cpu:nodejs 12345
搞定。现在你的Node.js应用就乖乖受内存和CPU限制了。
- 监控资源使用情况
想看看当前资源占用?用cgget命令查询:
sudo cgget -g memory,cpu:nodejs
命令会输出nodejs组里实时的内存和CPU使用情况。
以上步骤基于cgroups v1。如果你的系统用的是cgroups v2(比如较新的Debian版本),命令和路径可能略有不同,需要留心一下。