一、文件句柄不足产生原因
文件句柄过多原因: 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