一、文件句柄不足产生原因
文件句柄过多原因:
1、打开文件未释放
2、打开管道未释放
3、建立网络连接未释放(pipe,eventpoll多出现在 NIO 网络编程未释放资源 —— selector.close())
4、创建进程调用命令未释放(Runtime.exe(...) 得到的 Process, InputStream, OutputStream 未关闭,这也会导致 pipe,eventpoll 未释放)
5、mina库使用NIO时未使用connector.dispose();
6、netty3库使用NIO时未使用bootstrap.shutdown() 或bootstrap.releaseExternalResources();
二、查看文件句柄使用情况
系统级文件句柄数配置
[weblogic@hkczjjapp arms_bid]$ cat /proc/sys/fs/file-nr
2112 0 1617504-----(已分配文件句柄的数目、已分配未使用文件句柄的数目、文件句柄的最大数目)
用户级文件句柄数配置-默认
[weblogic@hkczjjapp arms_bid]$ 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) 63594
max locked memory (kbytes, -l) 64
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) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
用户级文件句柄数-实际数
[weblogic@hkczjjapp arms_bid]$ ulimit -n
1024
三、文件句柄使用情况分析
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr-----各进程打开句柄数
lsof -n|awk '{print $3}'|sort|uniq -c|sort -nr-----各用户打开句柄数
lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr-----各命令打开句柄数
查看各PID使用句柄数
[weblogic@hkczjjapp arms_bid]$ lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more-----(使用数量、PID)
1284 98765
1030 53348
查看PID句柄具体使用情况
[weblogic@hkczjjapp arms_bid]$ lsof -p 98765
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 98765 weblogic 682w REG 253,0 290 1985289 /home/weblogic/bid/WEB-INF/logs/logAudit.log
java 98765 weblogic 683w REG 253,0 0 1973768 /home/weblogic/bid/WEB-INF/logs/esb.log
java 98765 weblogic 684w REG 253,0 105838 1985316 /home/weblogic/bid/WEB-INF/logs/emp.log
java 98765 weblogic 685w REG 253,0 5951552 1985308 /home/weblogic/bid/WEB-INF/logs/arms.log
java 98765 weblogic 686w REG 253,0 0 1973829 /home/weblogic/bid/WEB-INF/logs/trace.log
java 98765 weblogic 687w REG 253,0 6122867 1985277 /home/weblogic/bid/WEB-INF/logs/console.log
参数详解:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
四、文件句柄数配置修改
[weblogic@hkczjjapp arms_bid]$ vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
末尾添加以上配置(root),重新登录生效,硬限制是实际的限制,而软限制,是warnning限制,超过这个数值只会做出warning