当前位置:首页 > 数码 >

文件过大超过系统限制怎么办(文件大小超过限制是什么意思)

来源:原点资讯(www.yd166.com)时间:2024-07-26 04:41:07作者:YD166手机阅读>>

在Linux环境下,当我们的项目运行一段时间之后,系统就不能正常访问了。本文以一个实际的案例来做一个剖析。

本案例是一个基于SpringBoot框架开发的项目网站系统,部署在centos操作系统下,网站运行一段时间之后,访问网页就长时间没有响应结果。

1、从现象中确定问题是什么

当项目出现这个问题之后,我们第一步需要确定问题到底是什么。我们通过查看项目日志,在日志中发现了下面异常信息:

java.io.IOException: 打开的文件过多 at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) ~[na:1.8.0_352] at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:421) ~[na:1.8.0_352] at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:249) ~[na:1.8.0_352] at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:547) ~[tomcat-embed-core-9.0.65.jar:9.0.65] at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:79) ~[tomcat-embed-core-9.0.65.jar:9.0.65] at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:129) ~[tomcat-embed-core-9.0.65.jar:9.0.65] at java.lang.Thread.run(Thread.java:750) [na:1.8.0_352] 2023-07-09 04:41:38.675 ERROR 53912 --- [o-8081-Acceptor] org.apache.tomcat.util.net.Acceptor : Socket accept failed

java.io.FileNotFoundException: /website/css/common.css (打开的文件过多) at java.io.FileInputStream.open0(Native Method) ~[na:1.8.0_352] at java.io.FileInputStream.open(FileInputStream.java:195) ~[na:1.8.0_352] at java.io.FileInputStream.<init>(FileInputStream.java:138) ~[na:1.8.0_352] at java.io.FileInputStream.<init>(FileInputStream.java:93) ~[na:1.8.0_352]

从异常信息中,我们可以确定问题是项目打开的文件数量超出了系统设定的上限。

2、分析为什么出现这样的问题

项目打开的文件数量为什么会超出系统设定的限额?这个问题我们进行一下拆解,可以细化为下面两个问题:

1、打开文件太多可能会导致什么问题呢?

  • 内存溢出:如果打开的文件太多,占用了大量的内存,可能会导致内存溢出。
  • 文件描述符不足:在 Linux 系统中,每个进程可打开的文件描述符是有限的。当打开的文件超过系统限制时,再尝试打开文件就会失败。
  • IO 异常:当打开的文件太多时,可能会引起 IO 异常。

2、项目为什么会打开过多的文件?

  • 程序打开文件后没有进行关闭
  • 程序并发打开过多

程序打开文件后没有进行关闭的导致项目运行一段时间之后,出现打开的文件过多的可能性最大。因为项目打开了文件没有关闭,打开的文件肯定会越来越多,从而超出了系统设定的限额。这也是开发者最容易犯下的错误。

3、提出问题的解决思路

通过上面的分析,我们如果只是系统设定限额太低,那很简单,只需要通过提高限额就可以了。使用下面的命令,可以查看系统设定的限额。

ulimit -n

如果需要增加该限额,可以修改系统配置即可:

vim /etc/security/limits.conf # 添加或者修改下面两个配置,数字即为限额 * soft nofile 4096 * hard nofile 4096

如果是程序打开文件没有进行关闭,如果我们通过分析代码,是很难快速定位的。我们可以通过下面的步骤来解决问题。

首先通过lsof命令来查看打开文件的情况。为提高效率,我们通过下面的方式先查找到项目的进程ID。查看项目的进程ID,有多种方式。假设项目的启动文件名包含"cms",我们执行下面的指令,会打印出项目的进程ID。

ps aux | grep cms | grep -v grep | awk '{print $2}' 23223

然后执行使用下面的指令(23223为上面指令的结果)就可以查看打开了多少文件。

lsof | grep 23223 | wc -l

如果这个文件数确实非常大,而且在不断的增加,那么可以执行下面的命令查看具体打开了些什么文件。

lsof -p 23223 | grep '/website/' | grep -v '\.jar'

指令 lsof -p 23223 的结果列出进程打开了哪些文件。然后过滤出项目文件夹(假设项目部署在/website)下不包含.jar的其他文件。之所以排除.jar文件,因为那些文件都是项目的程序文件,是必须的。当然如果文件还是挺多,那么你可以使用相同的方法把其他的文件排除掉,例如 .css 和 .js 等,这样让显示的文件范围更加精准。

比如结果中出现很多的 .pdf 文件,那就说明我们的程序中打开 .pdf 文件的地方肯定是打开文件而忘记了关闭。

文件过大超过系统限制怎么办,文件大小超过限制是什么意思(1)

关闭文件示例

,

栏目热文

目标文件系统大怎么办(目标文件系统过大无法保存怎么办)

目标文件系统大怎么办(目标文件系统过大无法保存怎么办)

在日常使用电脑和U盘时,我们经常会遇到目标文件过大无法复制到U盘的问题。这种情况下,我们需要寻找解决方案,以保证成功复制...

2024-07-26 04:39:20查看全文 >>

大米面发糕的做法大全(大米面发糕家常做法)

大米面发糕的做法大全(大米面发糕家常做法)

试过好几个大米发糕的方子,这个方子是成功率最高的,制作起来没有难度,成品又香又软又糯,无比松软。By 茱一喵喵用料大米 ...

2024-07-26 04:42:34查看全文 >>

简单的双方自愿协议书(双方自愿达成协议书内容模板)

简单的双方自愿协议书(双方自愿达成协议书内容模板)

男方:熊大,男,×年×月×日出生,×族,身份证号:××××××××,住址:××省××市××区××小区×号楼×单元××室。...

2024-07-26 04:29:29查看全文 >>

私人协议怎样写才有法律效力(私人之间怎样的协议才具法律效力)

私人协议怎样写才有法律效力(私人之间怎样的协议才具法律效力)

私人协议书格式范文 篇一  甲方:____有限公司(以下简称甲方)  乙方:__市____公司(以下简称乙方)  为了加...

2024-07-26 04:08:02查看全文 >>

亚健康包括心理吗(亚健康是一个人的心理介于健康和不健康)

亚健康包括心理吗(亚健康是一个人的心理介于健康和不健康)

【 心理亚健康有什么表现?】 1. 心神不定,焦虑万分,对任何以前很容易处理的问题现在都没有把握,担心马上会大难临头; ...

2024-07-26 03:59:07查看全文 >>

怎么临时请假1天最有说服力(请假一天最有说服力的方法)

怎么临时请假1天最有说服力(请假一天最有说服力的方法)

若要请假且具说服力,需诚心而论,详述缘由。可先陈诚恳之态,如“吾心惴惴,实有要事相告”。而后,具体说明请假之因。如身体抱...

2024-07-26 04:25:46查看全文 >>

最有说服力的请假方法(如何请假更有说服力)

最有说服力的请假方法(如何请假更有说服力)

:请假是我们工作生活中不可避免的一环,但如何写一份合理且有说服力的请假条却让许多人头疼。别着急,今天我将为你分享最有理有...

2024-07-26 04:13:44查看全文 >>

营养师报名咨询(营养师官方报名网站查询)

营养师报名咨询(营养师官方报名网站查询)

(鹿青松 李文璇 李萌博 济南报道)近日,深圳壹粉王梅(化名)向齐鲁晚报官方客户端齐鲁壹点情报站发来求助,今年...

2024-07-26 04:26:27查看全文 >>

黑色的光纤网线断了怎么接(黑色光纤线断了还能接吗)

黑色的光纤网线断了怎么接(黑色光纤线断了还能接吗)

接上个视频,这个视频给大家讲一下刹车灯和夜行灯线路的走向。为什么没在车上单独接?就是为了让大家看得清楚,所以这样就不太乱...

2024-07-26 04:14:29查看全文 >>

室外网线断了的正确接法(网线断了怎么连接图解)

室外网线断了的正确接法(网线断了怎么连接图解)

室内网线和室外网线的区别顾名思义,室外网络线就是使用在户外的线缆。室内网络线是主要用在室内的网线。室外网络线和室内网络线...

2024-07-26 04:40:23查看全文 >>

文档排行