一、什么是ulimit-n
ulimit是一个用于Linux系统进程控制的命令,允许管理员限制每个用户进程可以拥有的资源。-n是ulimit命令的其中一个选项,用于设置每个用户的文件描述符数量上限。
二、为什么需要ulimit-n永久生效
ulimit-n设置的文件描述符数量上限只对当前会话有效,当用户重新登录后,该设置会失效。如果希望这个设置得以永久保留,需要对配置文件进行修改。
三、修改配置文件
Linux系统中ulimit-n的配置文件通常为/etc/security/limits.conf。我们需要在该配置文件中添加以下内容:
* soft nofile 65536
* hard nofile 65536
其中,第一行表示将所有用户的file descriptor数量上限(soft limit)设为65536,第二行表示将所有用户的file descriptor数量上限(hard limit)也设为65536。这样,所有用户的文件描述符数量上限就被设置为了65536,可以根据实际情况进行修改。
四、重启生效
修改配置文件后,需要重启生效。可以通过执行以下命令来检查配置是否生效:
$ ulimit -n
如果输出结果为65536,则表示已成功使ulimit-n永久生效。
五、其他一些注意事项
1. 用户限制
除了设置全局的文件描述符数量上限外,还可以为某个用户或某个群组单独设置文件描述符数量上限。
例如,要为用户名为test的用户设置文件描述符数量上限为2048,可以在limits.conf文件中添加以下内容:
test soft nofile 2048
test hard nofile 2048
这样,test用户的文件描述符数量上限就会被设置为2048。
2. ulimit-n参数
除了在配置文件中设置ulimit-n的值,还可以直接在命令行中使用ulimit命令设置ulimit-n的值,如:
$ ulimit -n 2048
这里将ulimit-n设置为了2048。
需要注意的是,通过ulimit命令设置的ulimit-n的值只在当前会话中有效,重启后会失效。
3. /etc/security/limits.d/目录
除了/etc/security/limits.conf之外,还有一个/etc/security/limits.d/目录,该目录下的配置文件也会被读取。如果在limits.conf中设置的值和limits.d目录下的配置文件存在冲突,则以后者为准。
4. 硬限制和软限制
ulimit-n有两个参数:硬(limit)限制和软(soft)限制。软限制指的是当前进程可以打开的文件描述符数量,硬限制则指的是最大可以设置的文件描述符数量上限。
当用户尝试将soft limit设置为大于hard limit的值时,只有拥有root权限的用户才能修改。
5. 必要性分析
这里需要注意的是,将ulimit-n设置得过大会占用过多的系统资源。因此,需要根据实际情况进行设置,不能盲目地将其设置得过大。
需要给系统赋予足够的并发连接数时,必须正确设置ulimit参数。如在Nginx、MySQL、Redis等网络服务中,一个连接到服务的客户端将占用一个文件描述符,同时每个进程还会自己使用一些文件描述符,因此需要为每个服务进程设置足够的文件描述符数量上限。