
“open files”参数选项后面的数值就是当前系统支持的最大打开文件数
修改linux最大文件打开数
如果要修改linux最大文件打开数, 命令 unlimit -n 后面接需要设置的文件数量。
设置好之后,再次查看 unlimit -a 你会发现已经设置为新的数量了
一般来说,默认就够用了。当然,你设置2倍、3倍都要以,一般默认都是1024
Linux中如果一个进程打开文件或者socket连接过多,有没有及时处理和关闭掉文件或连接,当该进程打开文件的数量超过open files的数量时候,就会报too many open files的错误
Linux 的open files 是在一个同一个进程里限制的,当然也有全局的限制(查看/proc/sys/fs/file-max文件),ulimit -a pid命令可以看到open files进程级别限制的大小。
如果当前open files配置的是1024,则这个进程最多只能打开1024个文件,/proc/PID/fd 目录下的打开文件描述符的数量不会超过1024, 使用 lsof -p PId | wc -l 来查看进程打开的文件数, 超过1024则报too many open files的错误,这时候其他进程仍然可以打开文件,进程之间互不影响。
可以临时通过 ulimit -n 4096 这样设置 open files为4096,然后在同一个用户session下重新启动程序。这样的设置只能在Session级别生效,如果切换用户或者切换shell session就失效了。如果要永久生效,需要修改/etc/security/limits.conf文件,在文件末尾添加下列参数并重启机器:
noproc 是代表最大进程数
Golang等动态GC的语言,会通过GC来回收没有正确关闭的文件(比如使用完文件后没有调用Close()去关闭释放资源),这样就导致一些已经打开的文件又被GC关闭掉,然后此进程又可以打开另外的文件,从而会使/proc/PID/fd目录下文件描述符会指向不同的文件,可能链接到不同的文件。
通过设置GOGC=off环境变量关闭GO GC, 再执行go程序,此问题解决, /proc/PID/fd目录下的文件描述符一直保持在max open files 数量 1024,同时lsof -p pid|grep REG|wc -l 为1024.
打开文件后一定要记得f.Close()关闭,这样就能避免产生too many open files的报错。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)