"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的错误。
浙公网安备 33010602011771号