gpt4 book ai didi

java - Tomcat 打开文件太多错误(Ubuntu 18.04)

转载 作者:行者123 更新时间:2023-11-28 22:39:21 26 4
gpt4 key购买 nike

我已经在 tomcat (ubuntu 18.04) 中部署了我的 Java Rest 应用程序。一切似乎都很好,直到出现此错误:

java.io.FileNotFoundException: /opt/tomcat/webapps/botiv1/WEB-INF/lib/javax.inject-2.5.0-b42.jar (Too many open files)
java.base/java.io.RandomAccessFile.open0(Native Method)
java.base/java.io.RandomAccessFile.open(RandomAccessFile.java:345)
java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:259)
java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:214)
java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1263)
java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1229)
java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:845)
java.base/java.util.zip.ZipFile.<init>(ZipFile.java:245)
java.base/java.util.zip.ZipFile.<init>(ZipFile.java:175)
java.base/java.util.jar.JarFile.<init>(JarFile.java:341)
java.base/jdk.internal.reflect.GeneratedConstructorAccessor7.newInstance(Unknown Source)
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:209)
org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:149)
org.apache.catalina.webresources.AbstractArchiveResourceSet.openJarFile(AbstractArchiveResourceSet.java:307)
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:97)
org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:256)
org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
org.apache.catalina.webresources.Cache.getResource(Cache.java:62)
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2260)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:834)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1297)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:422)
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:285)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
org.glassfish.jersey.internal.Errors.process(Errors.java:316)
org.glassfish.jersey.internal.Errors.process(Errors.java:298)
org.glassfish.jersey.internal.Errors.process(Errors.java:268)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
com.ritech.model.CORSFilter.doFilter(CORSFilter.java:59)

我已将限制设置为 65000,但几个小时后仍然出现此错误。

/etc/security/limits.conf 文件

*软 nproc 65535

*硬 nproc 65535

*软文件 65535

*硬编码 65535根软 nproc 65535

root 硬 nproc 65535

root 软文件 65535

root 硬 nofile 65535

网络用户硬盘 nofile 64000

注意:这不是数据库连接泄漏,因为我跟踪了打开/Activity 的连接,并且 Activity 连接不超过 4 个。

最佳答案

我假设 tomcat 服务在 tomcat 用户下运行。使用命令 lsof -u tomcat | 检查打开的文件wc -l使用命令检查整个系统的最大文件句柄数:cat/proc/sys/fs/file-max

使用命令检查文件句柄的当前使用情况:cat/proc/sys/fs/file-nr

要使更改永久生效,请在文件 /etc/sysctl.conf 中添加或更改以下行。该文件在引导过程中使用。echo "fs.file-max=65536">>/etc/sysctl.conf(值在重启后有效)

运行命令 ulimit -a 并检查打开文件数 (-n) 和最大用户进程数 (-u)如有必要,增加值。

e.g. : in /etc/security/limits.conf file 
tomcat hard nofile 102400
tomcat soft nofile 102400

运行命令:systemctl status tomcat获取tomcat pid

检查 cat/proc/'tomcat pid'/limits,如果限制仍为默认值,请将以下行添加到/etc/init.d/tomcat 文件。

ulimit -Hn 16384

ulimit -Sn 16384

更改/etc/init.d/tomcat 文件后重启 tomcat 服务以应用更改。

关于java - Tomcat 打开文件太多错误(Ubuntu 18.04),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54159925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com