一般在/etc/security/limits.conf 中修改最大打开文件数和进程数,如:
    * soft noproc 102400
    * hard noproc 102400
    * soft nofile 102400
    * hard nofile 102400

    但是在centos 6.3下,方法不一样了
    首先在/etc/security/limits.conf中修改最大文件数和进程数
    *   soft   nofile   102400
    
    *   hard  nofile   102400
  
    然后在/etc/security/limits.d/90-nproc.conf中修改最大文件数和进程数
    *   soft   nproc   102400
    *   hard  nproc   102400
  


linux 打开文件句柄时可能出现“Too many open files”的提示,可以修改linux的最大文件句柄数限制:
1)ulimit -n 65535  
    在当前session有效,用户退出或者系统重新后恢复默认值

2)修改profile文件:在profile文件中添加:ulimit -n 65535  
   只对当个用户有效

3)修改文件:/etc/security/limits.conf,在文件中添加:(立即生效-当前session中运行ulimit -a命令无法显示)
  * soft nofile 32768 #限制单个进程最大文件句柄数(到达此限制时系统报警)  
  * hard nofile 65536  

    使用通配符*表示所有用户,*号可以换成具体的用户名或者用户组的名称。
    这个文件里的限制对root以外的用户在新登陆是立即生效,不用reboot。
    soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。
    nofile - 打开文件的最大数目, noproc - 进程的最大数目

4)当前系统文件句柄的最大数目,只用于查看,不能设置修改:file-max是内核可分配的最大文件数

[root@localhost ~]# cat /proc/sys/fs/file-max
1610145

nr_open是单个进程可分配的最大文件数

[root@localhost ~]# cat /proc/sys/fs/nr_open
1048576

ulimit或limits.conf来设置时,如果要超过默认的1048576值时需要先增大nr_open值(sysctl -w fs.nr_open=100000000或者直接写入sysctl.conf文件)。当然百万级别的单进程最大file-handle打开数应该也够用了

查看进程打开文件数

如果需要查看所有进程的文件打开数,如下图命令

     lsof |wc -l

 

   修改文件:/etc/sysctl.conf。在文件中添加:
    fs.file-max=655350 #限制整个系统最大文件句柄数  
    运行命令:/sbin/sysctl -p 使配置生效

 

查看整个系统目前使用的文件句柄数量命令:

 

Shell代码  



1. cat /proc/sys/fs/file-nr

辅助命令: 
查找文件句柄问题的时候,还有一个很实用的程序 lsof,可以很方便看到某个进程开了哪些句柄 :

Shell代码  


1. lsof -p pid

 

某个进程开了几个句柄 :

Shell代码  


    1. lsof -p pid |wc -l

    也可以看到某个目录 /文件被什么进程占用了,显示已打开该目录或文件的所有进程信息 :

     

    1. lsof path/filename  

    在 nginx.conf 

    中指定worker_process可以使用的nofile值

    worker_rlimit_nofile    8192;