這幾天在做一個性能測試,寫了一個模擬發送http的程序。模擬100并發的情況下,隨機發http get的請求。放到服務器上運行一段時間拋出Too many open files的異常。
異常信息簡單的信息如下:
I/O exception (java.net.SocketException) caught when processing request: Too many open files
大致了解下,是文件句柄數設置太低導致的。一般linux服務器默認的句柄數都是1024,執行ulimit -n,查看了下當前的seesion環境下句柄數。果然就是1024.
當前登錄的賬戶并不是root,直接切換到root賬戶,修改后切回到操作用戶metaboy 。發現句柄數并沒有改變。
所以使用下面的命令:
ulimit -n 65535
并不能有效的解決這個問題。直接這么修改open files 不能得到保持。下面給出的方法最簡單和最直接:
修改/etc/security/limits.conf 添加如下一行:
* - nofile 65535
修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so
最重要的,修改完這些后,要重新登錄下才行,不然該session的句柄數不會生效。
原文轉自:http://www.wangyuxiong.com/archives/52144