如果我的服务器用户经常忘记在 Web 服务器上的工作中使用“nice”命令,是否可以更改设置,以便他们启动的所有内容的默认优先级略高于零?
答案1
可以在/etc/security/limits.conf
文件中完成。
假设您的用户是组的成员users
,您可以添加如下行:
@users soft nice 5
答案2
听起来nice
,nice-ness 并不是您真正想要的工具 – cgroups 才是! (依赖用户nice
自己是一个架构错误;)正如您在实践中注意到的!)
您可以为用户、服务以及 Linux 中的事物提供“切片”配额——非常类似于当 CPU 争用较高时,nice-ness 可用于降低某些进程的优先级,但范围更广——也适用于 I /O 带宽、RAM、进程数和其他一些东西。
这相当简单:假设您想限制 uid 1234 的用户(当前已登录,以便其切片存在)获得 nginx HTTP 服务 1/4 的 CPU 时间:
systemctl set-property user-1234.slice CPUShares=500 MemoryHigh=16G
systemctl set-property nginx.service CPUShares=2000 MemoryHigh=28G
(这些变化是永久性的)
如果你想限制所有登录用户总计, 使用user.slice
。
如果您想预先限制特定用户,请创建 /lib/systemd/system/user-1234.slice
[Unit]
Description=Goddammit stop hogging my server, Carl
Documentation=man:systemd.special(7)
Before=slices.target
CPUShares=500
MemoryHigh=2G
[Slice]
Slice=user-slice
[Install]
WantedBy=multi-user.target
答案3
如果我的服务器用户经常忘记在 Web 服务器上的工作中使用“nice”命令
听起来你做错了/这是 XY 问题。为什么技术上简单的“用户”可以以服务器角色对主机进行 shell 访问?为什么允许其他进程在此机器上运行?为什么这些进程需要的 CPU 时间比操作系统想要给它们的 CPU 时间多?