1. 程式人生 > >tomcat 伺服器丟擲socket異常“檔案開啟太多”的問題(轉)

tomcat 伺服器丟擲socket異常“檔案開啟太多”的問題(轉)

轉自:http://www.blogjava.net/tufanshu/archive/2006/07/31/60981.html

最近,執行的tomcat伺服器在正常執行將近2個月後,丟擲如下錯誤:

警告: Reinitializing ServerSocket
2006-7-28 15:07:40 org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket
嚴重: Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=80] ignored exception: java.net.SocketException: Too many open files
java.net.SocketException: Too many open files
 at java.net.PlainSocketImpl.socketAccept(Native Method)
 at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
 at java.net.ServerSocket.implAccept(ServerSocket.java:450)
 at java.net.ServerSocket.accept(ServerSocket.java:421)
 at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 at java.lang.Thread.run(Thread.java:595)

原本以為是tomcat的配置或是應用本身的問題,"谷歌"一把後才發現,該問題的根本原因是由於系統檔案資源的限制導致的。具體可以參考

http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html
的說明。具體的解決方式可以參考一下:
1。ulimit -a 檢視系統目前資源限制的設定。
   [[email protected] security]# umlimit -a 
-bash: umlimit: command not found
[[email protected] security]# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited
[
[email protected]
security]# 
通過以上命令,我們可以看到open files 的最大數為1024
那麼我們可以通過一下命令修改該引數的最大值
2. ulimit -n 4096
[[email protected] security]# ulimit -n 4096
[[email protected] security]# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 4096
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited

這樣我們就修改了系統在同一時間開啟檔案資源的最大數,基本解決以上問題。

另外我們可以通過lsof  -p [程序的 pid]來檢視系統當前開啟的檔案資源,可以瞭解不同時期系統的檔案資源的使用情況,可根據情況進行系統資源的配置。

相關推薦

tomcat 伺服器socket異常檔案開啟”的問題

轉自:http://www.blogjava.net/tufanshu/archive/2006/07/31/60981.html 最近,執行的tomcat伺服器在正常執行將近2個月後,丟擲如下錯誤: 警告: Reinitializing ServerSocket 20

LNK1123: 轉換到 COFF 期間失敗: 檔案無效或損壞

環境:win7 64,vs2010,使用source\allinone\allinone.sln編譯32位版本icu 聯結器LNK是通過呼叫cvtres.exe完成檔案向coff格式的轉換的,所以出現這種錯誤的原因就是cvtres.exe出現了問題。 在電腦裡面搜尋一下c

Eclipse中啟動Tomcat異常:java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory的解決辦法

錯誤描述,如圖:  原因分析: eclipse-Version: 3.4.2沒有tomcat7.0的選項,所以報瞭如上的錯誤。 網上查找了下原因,才發現在呼叫的時候需要加入juli這個包。 此包位於tomcat根目錄bin目錄下。我的路徑是:D:\stru

啟動Tomcatjava.io.IOException異常

今日除錯專案時,啟動Tomcat出現java.io.IOException異常.主要錯誤提示如下: 嚴重: IOException while loading persisted sessions: java.io.EOFException 嚴重: Exception loa

關於Tomcat啟動專案時,控制檯各種異常,誤以為專案錯誤

1.當在eclipse啟動tomcat,初始化專案時,控制檯會列印啟動日誌:當出現            九月 19, 2017 3:07:35 下午 org.springframework.web.

eclipse中執行tomcat訪問 HTTP Status 401/404 異常

1. 問題描述: 今天在使用Tomcat8釋出多個專案的時候,不知是誤點選了什麼還是怎麼的。在eclipse中啟動tomcat(含專案)後,訪問時顯示not found 401錯誤 ,換用不同的Tomcat依舊不能解決問題。單獨啟動Tomcat 顯示HTT

java異常練習題:定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中異常,在主方法觀察結果

題目描述: 定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。  定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義

1).定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中異常,在主方法觀察結果。

1).定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。 2).定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義一個方法,在方法中丟

_092_Java_finally中使用return會吃掉catch中異常

轉自,感謝作者的無私分享。 如果在finally中使用return會吃掉catch中丟擲的異常,也會吃掉try或者catch中的return。 如果在finally中使用throw會吃掉catch中丟擲的異常,也會吃掉try或者catch中的return。 看例子:

第六十二條 每個方法異常都要有文件

每個方法,都要有文件註釋,這樣便於後期自己回顧當初的功能以及便於他人的閱讀理解,同樣的,每個方法丟擲的異常,也需要文件註釋。因此,花費時間為每個方法丟擲的異常文件是特別重要的。我們要記住,需要宣告受檢的異常,用Javadoc的@throws標記,並記錄每個異常的條件。如果一個

第六十二條 每個方法異常都要有文件

每個方法,都要有文件註釋,這樣便於後期自己回顧當初的功能以及便於他人的閱讀理解,同樣的,每個方法丟擲的異常,也需要文件註釋。因此,花費時間為每個方法丟擲的異常文件是特別重要的。我們要記住,需要宣告受檢的異常,用Javadoc的@throws標記,並記錄每個異常的條件。如果一個方法會丟擲多個異常類,不

應該手動什麼異常?RuntimeException?

Java程式設計師應該手動丟擲什麼異常?不能丟擲RuntimeException吧?  收藏帖子 回覆 秦三行 結帖率 96.88%  if(sectionCodeT!=null && !"".equ

如何防止後臺執行緒異常讓程式崩潰退出

如果你的程式拋了異常,你是怎麼處理的呢?等待程式崩潰退出?還是進行補救? 如果是做 UI 開發,很容易就找到 Dispatcher.UnhandledException 事件,然後在事件中進行補救。如果補救成功,可以設定 e.Handled = true 來阻

springmvc在處理請求過程中出現異常資訊交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常型別自定義異常類,這裡我們建立一個自定義系統異常,如果controller、service、dao丟擲此類異常說明是系統預期處理的異常資訊。

springmvc在處理請求過程中出現異常資訊交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。 1.1 異常處理思路 系統中異常包括兩類:預期異常和執行時異常RuntimeException,前者通過捕獲異常從而獲取異常資訊,後者主要通過規範程式碼開發、測試通過手段減少執

spring 宣告式事務配置,runtimeException異常不回滾

預設spring只在發生未被捕獲的runtimeexcetpion時才回滾。 最容易解決的辦法:程式碼級控制:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); try{ ..

Spring-AOP @AspectJ進階之繫結異常

概述 例項 總結 概述 和通過切點函式繫結連線點資訊不同,連線點丟擲的異常必須使用AfterThrowing註解的throwing成員進行繫結 例項 業務類 p

LinkedBlockingQueue阻塞佇列offer()操作中斷異常

說明 在使用LinkedBlockingQueue的offer方法時,出現了中斷異常,現分析一下出現這個中斷異常的原因。 會產生中斷異常的Demo import java.util.con

使用ibatisjava.lang.IllegalArgumentException實則:NestedSQLException異常

程式在測試庫上執行沒有任何問題,一旦在正試庫上執行就報錯了。丟擲瞭如下錯誤: java.lang.IllegalArgumentException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)a

無法捕獲異常:Java關於在catch中一個異常給外圍函式卻捕獲不到該異常的思考

先給出一串程式碼: public class TestException { public TestException(){ } boolean testEx()throws Exception{ boolean ret=true; try{ r

[JAVA]運用反射機制,異常的捕獲方法

背景介紹 筆者前些日子做過一個這樣的事情,利用反射機制呼叫一個會報Checked的異常的方法,在呼叫後沒法丟擲異常(原因是反射機制呼叫是沒法catch到Checked異常的)。舉個簡單的例子如下。 1.先定義一個簡單的異常類(這樣的定義是Checked的異常