Tomcat启报错,error:too many open files

原因:tomcat下面工程太多,其它一些项目正常启动,但我们的项目启动不了,并且项目报出的错误根本找不到原因,因为报出的错是开源项目里的。

项目错误:

Java代码 收藏代码
  1. SEVERE:Servlet.service()forservletdefaultthrewexception
  2. java.lang.NoClassDefFoundError:com/opensymphony/xwork2/util/profiling/UtilTimerStack
  3. atorg.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:111)
  4. atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  5. atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  6. atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  7. atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  8. atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  9. atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  10. atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  11. atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  12. atorg.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
  13. atorg.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
  14. atorg.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
  15. atorg.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
  16. atorg.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
  17. atorg.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
  18. atjava.lang.Thread.run(Thread.java:619)
  19. Dec7,20116:20:59PMorg.apache.catalina.core.StandardWrapperValveinvoke

后来找到 tomcat/logs/localhost.log 定位到了错误.

Java代码 收藏代码
  1. SEVERE:Servlet.service()forservletvalidateImgthrewexception
  2. javax.imageio.IIOException:Can'tcreateoutputstream!
  3. atjavax.imageio.ImageIO.write(ImageIO.java:1560)
  4. atcom.msd.store.login.ValidateImg.service(ValidateImg.java:104)
  5. atjavax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  6. atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  7. atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  8. atorg.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
  9. atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  10. atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  11. atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  12. atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  13. atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  14. atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  15. atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  16. atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  17. atorg.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
  18. atorg.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
  19. atorg.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
  20. atorg.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
  21. atorg.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
  22. atorg.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
  23. atjava.lang.Thread.run(Thread.java:619)
  24. Causedby:javax.imageio.IIOException:Can'tcreatecachefile!
  25. atjavax.imageio.ImageIO.createImageOutputStream(ImageIO.java:397)
  26. atjavax.imageio.ImageIO.write(ImageIO.java:1558)
  27. ...20more
  28. Causedby:java.io.IOException:Toomanyopenfiles
  29. atjava.io.UnixFileSystem.createFileExclusively(NativeMethod)
  30. atjava.io.File.checkAndCreate(File.java:1704)
  31. atjava.io.File.createTempFile(File.java:1792)
  32. atjavax.imageio.stream.FileCacheImageOutputStream.<init>(FileCacheImageOutputStream.java:71)
  33. atcom.sun.imageio.spi.OutputStreamImageOutputStreamSpi.createOutputStreamInstance(OutputStreamImageOutputStreamSpi.java:50)
  34. atjavax.imageio.ImageIO.createImageOutputStream(ImageIO.java:393)
  35. ...21more

Caused by: java.io.IOException: Too many open files

转:解决方法

大家都知道Linux系统默认打开文件数是1024,而实际的生产环境中,这个值总是显得太小,而太小的后果就是你的系统会报:too many open files 等这样的错误导致你系统死掉,所以我们总是要修改这个值,虽然表面上看来,Linux提供了ulimit这样的命令让你修改这个文件打开数,但不幸的是,过程远远没有看到的那么简单,下面子猴就谈谈这方面的问题。

1、 首先我们通过ulimit –a命令来查看系统的一些资源限制情况,如下:

红框中所示的是最大文件打开数,一般情况下是1024,但由于我系统已经改为了32768,所以现在看到的是32768。

我们也可以通过ulimit –n命令来查看最大文件打开数,如下:

32768

2、 修改目标

我们的目标是:让每一个用户登录系统后系统打开的最大文件数都是我们设定好的。

但我这里不得不说的是:非常遗憾,网上很多这方面关于ulimit设置修改资源限制的文章,但没一篇文章管用。

把这个目标分解为两个目标:

2.1、设置对root用户登录系统生效

这个目标可以实现起来不难

2.2、设置对所有用户生效

这个就非常麻烦了,弄不好还会把你的系统给整坏,因为要重编译Linux的内核才行!

所以权衡之下,我只实现了第一个目标,因为第二个目标的风险太大,我想如果我之前知道这点,那么我在装系统的时候我会先做这个处理,但现在我觉得已经晚了。

3、 修改的地方

3.1、修改/etc/security/limits.conf

通过 vi /etc/security/limits.conf修改其内容,在文件最后加入(数值也可以自己定义):

* soft nofile = 32768

* hard nofile = 65536

3.2、修改/etc/profile

通过vi /etc/profile修改,在最后加入以下内容

ulimit -n 32768

然后重新登录即可生效了。

说明:

其实只修改/etc/profile就可以生效了,但我还是建议把/etc/security/limits.conf也修改一下。

最后强调的是,你如果要使得修改对所有用户都生效,那么现在看来你只能重新编译Linux的内核才行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值