🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# limits.conf 限制着**用户**可以使用的最大文件数,最大线程,最大内存等资源使用量。 ## limits.conf工作原理 limits.conf是 pam_limits.so的 配置文件,然后/etc/pam.d/下的应用程序调\*\*pam_***.so模块**。譬如说,当用户访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目 录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的PAM模块进行处理 ### 例如 ~~~ 限制admin用户登录到sshd的服务不能超 过2个   在/etc/pam.d/sshd中添加:session required pam_limits.so   在/etc/security/limits.conf中添加:admin - maxlogins 2   注意:查看应用程序能否被PAM支持,用ldd   同理limits.conf要使用就必须保证/etc/pam.d/login 中有下面:session required pam_limits.so ~~~ ### limits.conf文件格式 ~~~ username|@groupname   type    resource    limit ~~~ * username|@groupname 设置需要被限制的用户名,组名前面加@和用户名区别。也可用通配符*来做所有用户的限制 * type 类型有soft,hard 和 -,其中soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了soft 和hard的值 * resource 表示要限制的资源 * core - 限制内核文件的大小 何谓core文件,当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像,系统默认core文件的大小为0,所以没有被创建。可以用ulimit命令查看和修改core文件的大小,例如: ~~~ #ulimit –c #ulimit -c 1000   -c 指定修改core文件的大小,1000指定了core文件大小。也可以对core文件的大小不做限制,如: ulimit -c unlimited   注意:如果想让修改永久生效,则需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf ~~~ * * data - 最大数据大小 * size - 最大文件大小 * memlock - 最大锁定内存地址空间 * nofile - 用户打开文件的最大数目 * rss - 最大持久设置大小 * stack - 最大栈大小 * cpu - 以分钟为单位的最多 CPU 时间 * noproc - 进程的最大数目 * as - 地址空间限制 * maxlogins - 此用户允许登录的最大数目 >[info]注意:要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:session required /lib/security/pam_limits.so ## nofile 用户级别限制 ### 总结 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit nofile的soft limit不能超过其hard limit nofile的hard limit不能超过/proc/sys/fs/nr_open ### 所有进程打开的文件描述符数 #### 设置file-max ~~~ # 临时性 echo 1000000 > /proc/sys/fs/file-max # 永久性 执行sysctl -p生效 # 在/etc/sysctl.conf中设置 fs.file-max = 1000000 ~~~ ### 单个进程最大打开文件描述符数 #### 设置nofile ``` # 查看 ulimit -n # 临时性 注销重新登录就失效 ulimit -Sn 设置最大打开文件描述符数的soft limit, 注意soft limit不能大于hard limit(ulimit -Hn可查看hard limit) 另外ulimit -n默认查看的是soft limit,但是ulimit -n 1800000则是同时设置soft limit和hard limit。对于非root用户只能设置比原来小的hard limit。 ulimit -Hn 查看hard limit # 永久性 设置需要注销之后重新登录才能生效 /etc/security/limits.conf中进行设置(需要root权限),可添加如下两行,表示用户chanon最大打开文件描述符数的soft limit为1800000,hard limit为2000000。: chanon soft nofile 180000 chanon hard nofile 200000 ``` ### 查看当前系统使用的打开文件描述符数 ~~~ cat /proc/sys/fs/file-nr 5664 0 186405 其中第一个数表示当前系统已分配使用的打开文件描述符数 第二个数为分配后已释放的(目前已不再使用) 第三个数等于file-max ~~~ # noproc 进程的最大数目 # 使用经验 修改limits.conf这类限制资源使用的文件,一定要备份配置文件,并进行测试,最好能多开一个终端,在当前终端不可使用的时候,用来执行补救措施。 [修改nofile引发无法登陆][1] 假如hard limit大于nr_open,注销后无法正常登录。可以修改nr_open的值: ~~~ echo 2000000 > /proc/sys/fs/nr_open ~~~ ## 如何设置nofile的值? ulimt -n命令进行测试,如果小于系统允许的最大值,设置成功,大于最大值,系统会报错提示。 [1]:https://www.cnblogs.com/micmouse521/p/8116329.html