"too many open files" 文件句柄

ulmit,展示了每个进程所能占用的文件句柄数量。

ulimit -n 
65535 

 

file-max,展示了操作系统能够占用的文件句柄数量总和,针对的是所有的进程。

cat /proc/sys/fs/file-max 
766722 

 

file-nr,展示了当前已经使用的句柄数量和总的句柄数量。可以拿来做监控。

cat /proc/sys/fs/file-nr 
1824  0 766722 

 

要支持百万连接,既要放开操作系统级别的句柄,也要放开进程级别的句柄。也就是说,ulimit和file-max的显示,都要大于百万才成。

 

设置进程的句柄个数

修改/etc/security/limits.conf

root soft nofile 1000000 
root hard nofile 1000000 
* soft nofile 1000000 
* hard nofile 1000000 

 

要看到这些改变是否已经对进程生效,可以查看进程的内存映射文件。比如cat /proc/180323/limits,其中会有详细的展示。

这个数值,也并不是想要设多大就多大的。它的大小上限,是由nr_open决定的。想要更大,就要修改/ect/sysct.conf 中fs.nr_open的值。

cat /proc/sys/fs/nr_open 
1048576 

 

那file-max又该如何修改呢?建议修改/etc/sysctl.conf文件,加入下面内容。足足有6百多万!

fs.file-max = 6553560 

 

当文件数量超出的时候,就会报kernel: VFS: file-max limit 65535 reached的错误。

 

posted @ 2025-04-18 10:51  fengjian1585  阅读(46)  评论(0)    收藏  举报