在配置Debian系统的ulimit时,有一些常见的误区需要注意。以下是一些典型的误区及其解决方案:
只有/etc/initscript是足够的:
/etc/security/limits.conf)来设置资源限制,例如crontab中的任务可能会覆盖ulimit的设置。解决方案是在/etc/security/limits.conf中定义相关的limit值。/etc/security/limits.conf中的*号通配并不匹配root用户:
/etc/security/limits.conf中的*号通配符不会匹配root用户。如果通过console登录root用户,会导致登录后的会话使用默认的limit值,进而影响后续通过SSH登录启动的应用。解决方案是在/etc/security/limits.conf中为root用户单独设置limit值。某些Systemd版本会导致max open file设置为infinity时只有65536:
DefaultLimitNOFILE=infinity,1号进程及其子进程的max open file仍然只有65536。解决方案是直接定义明确的DefaultLimitNOFILE值或升级到Systemd的新版本。不同PAM版本会有不同的默认limit值处理逻辑:
limit值处理逻辑。例如,Debian 9的PAM版本会使用FD_SETSIZE宏定义中的值,而Debian 8则会使用容器的1号进程的soft nofile limit值。解决方案是在容器镜像中打包正确的/etc/security/limits.conf文件。ulimit设置只在当前shell中生效:
ulimit命令设置的资源限制只在当前shell中有效,重启shell或机器后设置会丢失。解决方案是在/etc/profile或用户的.bashrc文件中添加ulimit设置,然后执行source /etc/profile或.bashrc使修改即时生效。忽略了系统级别的句柄限制:
ulimit,还有/proc/sys/fs/file-max参数。如果系统句柄数量设置过小,即使设置了ulimit,也会受限于这个参数。解决方案是修改/etc/sysctl.conf文件,增加fs.file-max的值。误以为Linux只能支持65535个连接:
通过了解这些常见误区并采取相应的措施,可以更好地配置和管理Debian系统的ulimit,避免因配置不当导致的资源限制问题。