# 永久限制用户使用的最大内存量 ## **做出修改** 要限制Linux系统中特定用户的内存使用,您可以在 `/etc/security/limits.d/`目录下的配置文件中设置 `memlock`和 `rss`限制。这些限制可以控制用户可以使用的最大内存量。 以下是如何编辑配置文件来限制用户内存使用的方法: 1. **打开终端**。 2. **以root用户身份登录**,或者使用 `sudo`命令获取临时root权限。 3. **使用文本编辑器打开 `limits.d`目录下的配置文件**。例如,使用 `nano`编辑器: ```bash sudo nano /etc/security/limits.d/20-nproc.conf ``` 如果您想创建一个新的配置文件,可以使用任何其他名称,例如: ```bash sudo nano /etc/security/limits.d/99-memlimit.conf ``` 4. **添加或修改配置行**。在文件中,您可以添加以下格式的行来限制内存使用: ``` hard rss hard memlock ``` - `` 是要限制的用户名。 - `rss` 限制用户可以使用的最大内存量(以千字节为单位)。 - `memlock` 限制用户可以锁定的最大内存量(也是以千字节为单位)。 例如,要限制用户 `john`的最大内存使用为1GB,您可以添加以下行: ``` john hard rss 1048576 john hard memlock 1048576 ``` 5. **保存并退出编辑器**。在 `nano`中,您可以按 `Ctrl-X`,然后按 `Y`键确认保存,并按 `Enter`键退出。 6. **重新登录或重启服务**。对于某些资源限制,您可能需要重新登录您的用户会话或重启相关的服务才能使更改生效。 请注意,`rss`和 `memlock`限制可能不会完全限制用户的所有内存使用,因为它们主要影响可以锁定的内存和常驻集大小。如果您需要更严格的内存限制,可能需要结合使用cgroups或其他系统级工具。 在做出任何更改之前,请确保您了解每个配置项的含义和影响,因为错误的配置可能会导致系统不稳定或其他用户无法正常使用系统资源。如果您不确定,请咨询系统管理员或查阅相关文档。 ## **使其生效** 对于通过 `sudo nano /etc/security/limits.d/20-nproc.conf` 命令对 `limits.d` 配置文件所做的更改,如果不重启系统,您可以通过以下步骤使修改生效: 1. **重新加载PAM配置**: 由于 `limits.conf`文件通常由PAM(Pluggable Authentication Modules)读取,您可以通过重新加载PAM模块来应用更改。这可以通过以下命令完成: ```bash sudo systemctl restart systemd-user-sessions ``` 或者,如果您使用的是较旧的系统,可能会需要执行: ```bash sudo service restart login ``` 这些命令会重启用户会话服务,使得新的limits设置对新的用户登录生效。 2. **重新登录**: 对于已经登录的用户,为了让新的limits设置生效,您需要退出当前会话并重新登录。这样,当用户重新登录时,PAM会读取新的limits配置。 3. **对于已经运行的会话**: 对于已经运行的会话,可能需要手动设置limits。这可以通过 `ulimit`命令来完成。例如,要增加当前会话的最大文件描述符数量,可以使用: ```bash ulimit -n 1024 ``` 请注意,`ulimit`命令的更改只对当前会话有效,并且可能需要相应权限来提高限制。 4. **重启特定服务**: 如果您的更改是针对特定服务的,比如限制某个服务的子进程数量,那么您可能需要重启该服务以使更改生效。 请记住,`limits.d`文件中的设置对新登录的用户和新的进程有效,但对已经运行的进程无效,除非它们被重新启动或以其他方式应用新的limits。如果您需要立即对正在运行的进程应用新的limits,可能需要手动干预或重启相应的服务。 ``` (base) [root@node01 ~]# cat /etc/security/limits.d/20-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 4096 root soft nproc unlimited * hard rss 524288000 #500GB * hard memlock 524288000 #500GB ```