我们希望通过systemd拉起服务并通过cgroup限制其CPU、memory的使用,因此我们新建了一个.service文件,文件里面创建了自己的cgroup目录,设置了cpu、memory限制,然后通过cgexec拉起我们的服务进程。假设我们的服务叫xx,.service文件大概是这样的:
[Unit] Description=xx Server Documentation=xx docs [Service] EnvironmentFile=-/etc/xx ExecStartPre=/usr/bin/mkdir -p /sys/fs/cgroup/memory/xx ExecStartPre=/usr/bin/bash -c "echo 2G > /sys/fs/cgroup/memory/xx/memory.limit_in_bytes" ExecStartPre=/usr/bin/bash -c "echo 2G > /sys/fs/cgroup/memory/xx/memory.memsw.limit_in_bytes" ExecStartPre=/usr/bin/mkdir -p /sys/fs/cgroup/cpu/xx ExecStartPre=/usr/bin/bash -c "echo 100000 > /sys/fs/cgroup/cpu/xx/cpu.cfs_period_us" ExecStartPre=/usr/bin/bash -c "echo 100000 > /sys/fs/cgroup/cpu/xx/cpu.cfs_quota_us" ExecStartPre=/usr/bin/bash -c "echo 1024 > /sys/fs/cgroup/cpu/xx/cpu.shares" ExecStart=/usr/bin/cgexec -g cpu,memory:xx /usr/bin/xx Restart=on-failure KillMode=process LimitNOFILE=102400 LimitNPROC=102400 LimitCORE=infinity [Install] WantedBy=multi-user.target