Tomcat Icefaces数百次打开jsf和Icefaces jar文件

Tomcat Icefaces数百次打开jsf和Icefaces jar文件,tomcat,icefaces,Tomcat,Icefaces,我只是让我系统的所有用户尝试同时登录。我的服务器因以下错误而崩溃: SEVERE: Socket accept failed Throwable occurred: java.net.SocketException: Too many open files at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:4

我只是让我系统的所有用户尝试同时登录。我的服务器因以下错误而崩溃:

SEVERE: Socket accept failed
Throwable occurred: java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:449)
    at java.net.ServerSocket.implAccept(ServerSocket.java:473)
    at java.net.ServerSocket.accept(ServerSocket.java:441)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:59)
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:212)
    at java.lang.Thread.run(Thread.java:736)
May 9, 2012 10:04:11 AM org.apache.tomcat.util.net.JIoEndpoint$Acceptor run
我运行了一个lsof命令来查看tomcat用户打开了哪些文件,并得到了一个巨大的文件列表。大多数看起来都很正常,但后来我发现了大约700个相同文件的条目,下面是该输出的一小部分:

java    12285 tomcat  256r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  257r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar
java    12285 tomcat  258r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar
java    12285 tomcat  259r   REG                8,3   271669    1040879 /usr/share/tomcat7/shared/nmsc/icefaces-3.0.0.RC2.jar
java    12285 tomcat  260r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  261r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  262r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  263r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  264r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  265r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  266r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  267r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  268r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  269r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar
java    12285 tomcat  270r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar
java    12285 tomcat  271r   REG                8,3   271669    1040879 /usr/share/tomcat7/shared/nmsc/icefaces-3.0.0.RC2.jar
java    12285 tomcat  272r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  273r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  274r   REG                8,3   271669    1040879 /usr/share/tomcat7/shared/nmsc/icefaces-3.0.0.RC2.jar
java    12285 tomcat  275r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar
java    12285 tomcat  276r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  277r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar
java    12285 tomcat  278r   REG                8,3   271669    1040879 /usr/share/tomcat7/shared/nmsc/icefaces-3.0.0.RC2.jar
java    12285 tomcat  279r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  280r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  281r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar
java    12285 tomcat  282r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  283r   REG                8,3   271669    1040879 /usr/share/tomcat7/shared/nmsc/icefaces-3.0.0.RC2.jar
java    12285 tomcat  284r   REG                8,3  1470076    1040880 /usr/share/tomcat7/shared/nmsc/icefaces-ace-3.0.0.RC2.jar
java    12285 tomcat  285r   REG                8,3  1955103    1040820 /usr/share/tomcat7/shared/nmsc/jsf-impl-2.1.4.jar

我增加了tomcat用户允许的文件句柄的数量,让我度过了早上,但为什么tomcat会为每个HTTP请求打开一个新的icefaces和jsf副本(这似乎是正在发生的),而不是使用类加载器在引导时加载的文件副本呢?我甚至不知道从哪里开始解决这个问题。

就我个人而言,我会启动一个探查器(我使用YourKit,因为他们为开源开发人员提供免费副本),拍摄内存快照,然后搜索这些文件名。这将导致文件、URL或类似的对象,希望这些对象能够提供一些关于问题所在的线索。如果没有,您将需要开始跟踪对象分配,这将非常昂贵,但可行。其他探查器可用;)

我刚刚运行了我们的ACE showcase示例,没有看到随着每个请求而增加文件句柄的行为。您是否在应用程序中使用复合组件?Mojarra版本中有一个bug直到最近(Mojarra 2.1.7)才被修复,该bug与核心复合组件类有关:


它记录已打开但未关闭的输入流。在Windows上,这会锁定文件并防止重新部署它们。在其他系统上,这可能可以解释您看到的行为。

您使用的是新的G1垃圾收集器吗?如果是这样的话,您可能已经发现了某个库或代码中的错误。新的G1垃圾收集器似乎不像以前的实现那样倾向于关闭文件

这里有一个写得很好的例子:

顺便说一句,只有40个用户试图同时进入,但IceFaces是PrimeFaces的分支,如果你不知道的话。