?????? 刚才写脚本出现了一个异常java.net.SocketException: Too many open files ,以前没有遇到过,试了几次都这样。后来看了一下linux的限制(执行ulimit -a 命令)显示如下
?
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 71680 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 71680 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
?
??? 其中open files 为1024 ,好像有点小,将它调整大一点试一下就ok了(ulimit -n 65536)。注意:这个调整只影响你的创建的子进程不会影响,不会影响其他人。
?
?? 有时候在linux上的服务器也会抛出这个错误 ,只要在启动服务器的脚本执行前添加一些代码。设置ulimit 例:
?
?
76 ulimit -s 128 77 ulimit -n 8192
?
??? 以前只是知道ulimit 命令这次算是用上啦!!
Linux下如何查看进程打开的文件以及修改进程打开文件数上限
1. 查看进程打开文件
在/proc下,对应每个进程有一个以进程号命名的目录,该目录下有一个fd目录,该目录下面的每个文件是一个符号连接,其文件名对应该进程占用的一个文件描述符,而连接指向的内容表示文件描述符对应的实际文件。
2. 修改进程打开文件数上限
Linux 默认的进程打开文件上限是1024个,可以通过ulimit -n查看。很多系统上限可以通过修改/etc/security/limits.conf文件改变,这个文件有详细的注释,对如何修改做了说明。如果希望把所有用户的进程打开文件上限改为65536,可以加入下面两行
* soft nofile 65535
?????? * hard nofile 65535
还可以只真对某个用户或某个组做修改,具体方法参见文件注释。修改后需要重新启动系统才能生效。