首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

tomcat 打开文件太多

2012-05-30 
求助 tomcat 打开文件太多帮忙看下,特急~~谢谢Java code\u4e25\u91cd: Servlet.service() for servlet def

求助 tomcat 打开文件太多
帮忙看下,特急~~谢谢

Java code
\u4e25\u91cd: Servlet.service() for servlet default threw exceptionjava.io.FileNotFoundException: /home/an/tomcat/webapps/ROOT/Site/flash/xxdll.flv (Too many open files)    at java.io.FileInputStream.open(Native Method)    at java.io.FileInputStream.<init>(FileInputStream.java:106)    at org.apache.naming.resources.FileDirContext$FileResource.streamContent(FileDirContext.java:927)    at org.apache.catalina.servlets.DefaultServlet.copy(DefaultServlet.java:1832)    at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:919)    at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:398)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)    at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:889)    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:732)    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2262)    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)    at java.lang.Thread.run(Thread.java:662)2011-12-8 0:00:01 org.apache.catalina.core.StandardWrapperValve invoke


[解决办法]
java.io.FileNotFoundException:
文件没找到 路径不对?
[解决办法]
找不到文件 
你保存的文件最好不要全部集中在一起,最好有个分类!
[解决办法]
引用
打开文件数过多。。。以前在linux部署项目遇到过。。。我当时的原因是因为没有将项目class达成jar包,直接打的war包。。。

我的改进方案: 将项目的所有class类打包为一个jar包,导入到本项目lib目录,,打成war包。。发布。。

你的问题:
java.io.FileNotFoundException: /home/an/tomcat/webapps/ROOT/Site/flash/xxdll.flv
看上去是某个文件没有找到导致的。
看看是不是某个配置文件/home/an/tomcat/webapps/ROOT/Site/flash/xxdll.flv加载路径对不对?

------解决方案--------------------


Too many open files经常在使用linux的时候出现,大多数情况是您的程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭。 

如果检查程序没有问题,那就有可能是linux默认的open files值太小,不能满足当前程序默认值的要求,比如数据库连接池的个数,tomcat请求连接的个数等。。。 

查看当前系统open files的默认值,可执行: 


Java代码 
[root@pororo script]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 128161
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 800000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 128161
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@pororo script]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 128161
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 800000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 128161
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

如果发现open files项比较小,可以按如下方式更改: 

1. 检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。 


Java代码 
# cat /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max

如果设置值太小,修改文件/etc/sysctl.conf的变量到合适的值。这样会在每次重启之后生效。 如果设置值够大,跳过这一步。 

[解决办法]

当我们用ulimit -a命令可以查看 open files(默认为1024)和max user processes(默认也为1024),
所以默认情况下这个server只允许同时打开1024个文件,处理1024个用户进程,
若要 临时 改变这两个参数值,可以使用 ulimit -n 10240 ,ulimit -u 10240,
若要 长久 改变这两个参数值,就要修改/ect/security/limits.conf,在文件中加上两行:
* - nofile 102400
* - nproc 102400

而对于大量使用tcp连接的应用来说,也需要对/etc/sysctl.conf中的参数进行相应优化:
net/ipv4/ip_always_defrag = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 102400
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
上面是我根据我的需求的一些参数调整,你可以根据你的需求来调整相应参数值。
然后执行 sysctl -p命令可立即生效。sysctl -a可查看参数值。

热点排行