liunx中文件句柄有两个限制。一个是用户级,一个是系统级(也叫内核级)。Linux中的最大打开文件句柄数就是最大打开文件数。是单个进程最多可以打开的文件句柄数(也包括Socket连接数,默认大小为1024)。系统级最大限制:cat/proc/sys/fs/file-max用户级最大限制ulimit-n(默认1024,阿里云、华为云等云主机一般为65535)查看一个进程的最大打开文件数和当前打开文件数/proc/[pid]/limits显示当前进程的资源限制/proc/[pid]/fd是一个目录,包括打开文件的进程/proc/[pid]/task查看某个进程线程的详细信息修改最大限制用户级用户级修改临时有效方法:(重启后失效)ulimit-SHn10000ulimit命令分为软限制和硬限制,加-H是硬限制,加-S是软限制。默认显示为软限制。如果在运行ulimit命令修改时不加-H或-S,这两个参数会一起修改。硬限制是实际限制,软限制是警告限制,只会给出警告用户级修改永久有效:vi/etc/security/limits.conf修改配置文件/etc/security/limits.conf,add:softnofile65535hardnofile65535echo"*softnofile65535">>/etc/security/limits.confecho"*hardnofile65535">>/etc/security/limits.conf表示用户使用,但有些系统不识别,需要具体的用户名,如:rootsoftnofile65535roothardnofile65535重新登录验证,或者重启后验证。系统级其实上面的修改都是对一个进程打开的文件句柄数的限制。我们还需要设置系统的总限制。比如我们设置进程打开的文件句柄数为1024,但是系统总的限制只有500,所以所有进程最多可以打开500个文件句柄。从这里我们可以看出,仅仅设置进程的打开文件句柄数是不够的。所以需要先修改系统的总限制才可以在系统级临时修改:echo655350>/proc/sys/fs/file-max系统级修改永久效果为:vi/etc/sysctl.conf加入系统允许打开最大文件数fs.file-max=655350进程允许打开最大文件数。这里注意nr_open要大于nofile,否则无法登录。fs.nr_open=60000sysctl-p检查是否生效,如果没有,重启。参考链接:修复打开文件过多的3种方法
