我发现有一个服务,cpu只跑了一半,我怀疑没有跑满,除了服务本身的cpulimit配置项,怀疑是cgroup的问题。所以有了这一篇文章。
是什么
cgroups是一种内核机制,用于控制进程组的资源使用(CPU、内存、IO、网络等)。
限制内存
在Linux系统中,可以使用cgroups来限制一个进程的内存。
下面是使用cgroups限制一个进程的内存的步骤:
1.创建cgroups:
sudo mkdir /sys/fs/cgroup/memory/mygroup
2.设置cgroups的内存限制:
sudo sh -c "echo 50M > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes"
3.将进程加入到cgroups中:
sudo echo <pid> > /sys/fs/cgroup/memory/mygroup/cgroup.procs
其中,<pid>
是要限制内存的进程的进程号。
通过以上步骤,就可以限制一个进程的内存。当进程使用的内存超过限制时,系统会将其强制终止。
限制cpu
在Linux系统中,可以使用cgroups来限制一个进程的CPU使用率。
以下是使用cgroups限制一个进程的CPU使用率的步骤:
1.创建cgroups:
sudo mkdir /sys/fs/cgroup/cpu/mygroup
2.设置cgroups的CPU使用率限制(比如限制为50%):
sudo sh -c "echo 50000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us"
sudo sh -c "echo 100000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us"
其中,cpu.cfs_quota_us表示CPU时间配额(单位为微秒),cpu.cfs_period_us表示CPU时间周期(单位为微秒),这里将CPU时间配额设置为50000微秒,CPU时间周期设置为100000微秒,表示CPU使用率限制为50%。
3.将进程加入到cgroups中:
sudo echo <pid> > /sys/fs/cgroup/cpu/mygroup/cgroup.procs
其中,<pid>
是要限制CPU使用率的进程的进程号。
通过以上步骤,就可以限制一个进程的CPU使用率。当进程使用CPU时间超过配额时,系统会将其暂停一段时间,从而控制CPU使用率。
表现就是略卡顿。
最后
我们用惯了k8s,其实很多服务比如有状态的,不上k8s更安全,cgroup限制了解一下很有必要。
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论