簡體   English   中英

JBoss AS 4.2.3-GA 中打開的文件過多異常

[英]Too many open files Exception in JBoss AS 4.2.3-GA

我想解決這個問題,實際上我並不清楚當我的應用程序在 CentOs 環境中運行時會發生什么,幾天后我開始收到以下異常:

2011-07-12 21:58:03,598 12155907 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)
2011-07-12 21:58:03,600 12155909 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)
2011-07-12 21:58:03,600 12155909 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)
2011-07-12 21:58:03,601 12155910 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)

日志開始快速增長......我在我的應用程序中使用了一些 JBOSS QUEUES,以及一些 JMX 連接,我想知道如何快速檢測問題,或者這是由計算機中的其他組件引起的。 任何建議,請我完全擔心這個問題。

以下是調試打開文件過多情況的一些提示。 兩個可以提供幫助的 unix 命令是ulimitlsof

我建議您首先使用man ulimit了解您可以更改進程的最大打開文件數。 只需在命令行上鍵入ulimit為您提供 ulimit 的默認值。 例如,對我來說:

$ ulimit
unlimited

我在香草 Ubuntu 11.04 發行版上運行,所以看起來無限制是默認設置。 在我的大多數生產機器上,默認值為 1024。

接下來, lsof -p <pid>將列出 ID 為 <pid> 的進程的所有打開文件。

也許您會發現您沒有關閉文件,或者您只是打開了太多文件(基於設置的限制 ulimit)?

下一步,您將運行 Java 進程,以便在出現打開文件過多的情況時獲取進程的線程轉儲。 要獲取線程轉儲,請向進程發送kill -3 <pid>或者如果您已在當前 shell 中啟動 Java 進程,則可以鍵入 CTRL-Break 以獲取線程轉儲。 在一兩分鍾內收集 3 個或更多線程轉儲特別有用,並且從這個線程轉儲集合中收集,因此線程轉儲中存在的線程值得一看。

如果這些都對您沒有幫助,請在 SO 中搜索“打開的文件過多”。 我做了並找到了這個鏈接,接受的答案可能會對你有所幫助

Java 打開的文件太多

我認為您遇到了這個問題 - AJP 連接保留為 CLOSE_WAIT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM