项目部署到中标麒麟系统上,登陆后过一段时间页面退出报这个错误
一、产生原因
too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。
引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数,通过命令ulimit -a可以查看当前系统设置的最大句柄数是多少:
open files那一行就代表系统目前允许单个进程打开的最大句柄数,这里是1024。
使用命令lsof -p 进程id可以查看单个进程所有打开的文件详情,使用命令lsof -p 进程id | wc -l可以统计进程打开了多少文件,如果文件数过多使用lsof -p 进程id命令无法完全查看的话,可以使用lsof -p 进程id >openfiles.log将执行结果内容输出到日志文件中查看。
二、解决方法
1、增大允许打开的文件数——命令方式
ulimit -n 2048
这样就可以把当前用户的最大允许打开文件数量设置为2048了,但这种设置方法在重启后会还原为默认值。
ulimit -n命令非root用户只能设置到4096。
想要设置到更大需要sudo权限或者root用户。
2、增大允许打开的文件数——修改系统配置文件
vim /etc/security/limits.conf
最前的 * 表示所有用户,可根据需要设置某一用户,例如
roy soft nofile 8192
roy hard nofile 8192
注意”nofile”项有两个可能的限制措施。就是项下的hard和soft。 要使修改过得最大打开文件数生效,必须对这两种限制进行设定。 如果使用”-“字符设定, 则hard和soft设定会同时被设定。
3、检查程序问题
如果你对你的程序有一定的解的话,应该对程序打开文件数(链接数)上限有一定的估算,如果感觉数字异常,请使用第一步的lsof -p 进程id >openfiles.log命令,获得当前占用句柄的全部详情进行分析
Linux文件数打开数\x0d\x0a查看当前系统最大的文件打开数,\x0d\x0a在linux终端中输入ulimit-a\x0d\x0a“openfiles”参数选项后面的数值就是当前系统支持的最大打开文件数\x0d\x0a\x0d\x0a修改linux最大文件打开数\x0d\x0a如果要修改linux最大文件打开数,可以通过参数命令unlimit-n后面接需要设置的文件数量。\x0d\x0a设置好之后,再次查看unlimit-a你会发现已经设置为新的数量了\x0d\x0a\x0d\x0a设置好之后,再次编辑修改重启设置的服务,已经没有刚刚那个1024文件数限制的报错提示\x0d\x0a\x0d\x0a其他修改方法\x0d\x0a除此之外,如果针对不同的用户。也可以通过编辑修改/etc/rc.local文件设置环境变量,添加unlimit-n\x0d\x0a,重启之后一般就自动设置好了\x0d\x0a\x0d\x0a查看系统句柄文件数\x0d\x0a当前系统文件句柄的最大数目,只用于查看,不能设置修改\x0d\x0acat/proc/sys/fs/file-max\x0d\x0a\x0d\x0a查看进程打开文件数\x0d\x0a如果需要查看所有进程的文件打开数,命令lsof|wc-lopenFileDialog1.InitialDirectory = Application.StartupPath可以将起始路径设置为exe所在目录,你在这个基础上写路径就行了,比如exe所在目录下面的image下
openFileDialog1.InitialDirectory = Application.StartupPath+@"\image"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)