linux服务器报Too many open files的解决方法
linux?上tomcat?服務器拋出socket異常“文件打開太多”的問題?
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的配置或是應用本身的問題,"谷歌"一把后才發現,該問題的根本原因是由于系統文件資源的限制導致的。
具體的解決方式可以參考一下:
1。ulimit?-a?查看系統目前資源限制的設定。
[root@test?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
[root@test?security]#?
通過以上命令,我們可以看到open?files?的最大數為1024
那么我們可以通過一下命令修改該參數的最大值
2.?ulimit?-n?4096
[root@test?security]#?ulimit?-n?4096
[root@test?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
這樣我們就修改了系統在同一時間打開文件資源的最大數,基本解決以上問題。
報這個錯誤就在我那次登陸更新之后又報的,原來ulimit -n 4096 命令只能臨時的改變open files 的值,當重新登陸后又會恢復,所以需要永久設置open files 的值才行啊,用ulimit -n 修改open files 總是不能保持。所以用下面一個簡單的辦法更好些。
修改/etc/security/limits.conf
添加如下一行:* - nofile 65536
修改/etc/pam.d/login
添加如下一行session required /lib/security/pam_limits.so
退出shell登陸,重新登陸一次即生效(運行ulimit -n 檢查)
轉載于:https://www.cnblogs.com/yangxia-test/p/3356928.html
總結
以上是生活随笔為你收集整理的linux服务器报Too many open files的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 大家好,换博客了,希望大家多多关注
- 下一篇: 如何防止家中电器电击引发火灾?