当前位置:编程学习 > JAVA >>

Java进程句柄超过1024限制,其中存在大量的sockname: AF_INET 0.0.0.0 port: 0

Java进程句柄超过1024限制,用pfiles查看进程句柄,其中存在大量(355个)的sockname: AF_INET 0.0.0.0  port: 0, IP:0.0.0.0,端口0, 
请问一般什么情况下会出现?(JDK1.6.0, 操作系统solaris SunOS slsosssvr-2 5.10) 
应用中没有存在socket没有关闭的情况,会不会操作系统或者虚拟机的问题? 

201: S_IFSOCK mode:0666 dev:361,0 ino:21554 uid:0 gid:0 size:0 
      O_RDWR|O_NONBLOCK 
SOCK_STREAM 
SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.0.192.0) 
sockname: AF_INET 0.0.0.0  port: 0 
202: S_IFSOCK mode:0666 dev:361,0 ino:40880 uid:0 gid:0 size:0 
      O_RDWR 
SOCK_STREAM 
SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.0.192.0) 
sockname: AF_INET 0.0.0.0  port: 0 
203: S_IFSOCK mode:0666 dev:361,0 ino:23153 uid:0 gid:0 size:0 
      O_RDWR 
SOCK_STREAM 
SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.0.192.0) 
sockname: AF_INET 0.0.0.0  port: 0 
204: S_IFSOCK mode:0666 dev:361,0 ino:41150 uid:0 gid:0 size:0 
      O_RDWR 
SOCK_STREAM 
SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.0.192.0) 
sockname: AF_INET 0.0.0.0  port: 0 
205: S_IFSOCK mode:0666 dev:361,0 ino:6875 uid:0 gid:0 size:0 
      O_RDWR 
SOCK_STREAM 
SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.0.192.0) 
sockname: AF_INET 0.0.0.0  port: 0 
206: S_IFSOCK mode:0666 dev:361,0 ino:48196 uid:0 gid:0 size:0 
      O_RDWR 
SOCK_STREAM 
SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.0.192.0) 
sockname: AF_INET 0.0.0.0  port: 0 
207: S_IFSOCK mode:0666 dev:361,0 ino:57062 uid:0 gid:0 size:0 
      O_RDWR 
SOCK_STREAM 
SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.0.192.0) 
sockname: AF_INET 0.0.0.0  port: 0 --------------------编程问答-------------------- ....我想知道更具体的信息 
比如阁下用的是什么方式创建的连接 用的是NIO还是普通Socket
再者并发连接量大概多大 

还有 并不是说关闭连接端口就会被释放 不同的操作系统对这里的处理不太一样  --------------------编程问答--------------------
引用
这个问题。之前我在给某银行实施的时候遇到过。。

首先将服务器句柄数改为4096最合适。。一般都是默认的1024.有点小
然后通过lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more命令观察查看具体那个java进程的句柄数最多或者逐步增多。。

句柄操作命令:
查看的某个如24204进程详细内容 如
Shell命令:ps -aef|grep 24204

查看系统单个进程允许打开的文件句柄最大数:如:ulimit –n
更改设置系统单个进程允许打开的文件句柄最大数:如:ulimit -HSn 4096 


由于当时程序是我自己写的。所以排除了文件未关闭以及socket,jdbc连接问题。。最后发现是打包问题。。我将做好的程序直接打成war包造成的。。

我的解决方案是:将程序中的所有class文件通过fat jar工具打成一个jar包。然后放到程序的WEB-INF/lib目录,再打成war包。。就好了。。。标准的做法都是打成jar包。。
--------------------编程问答-------------------- 用的是NIO,连接量大概100多客户端,哪个java进程占有这么多句柄已经知道了,但现在关键是为何这个java进程占有了这么多句柄,为何有这么多(355个)的sockname: AF_INET 0.0.0.0 port: 0,这个pfiles打印出来的,IP为0.0.0.0,端口为0的socket从没见过,知道这是啥,为何会产生这么多? --------------------编程问答--------------------
引用 3 楼 yflin 的回复:
用的是NIO,连接量大概100多客户端,哪个java进程占有这么多句柄已经知道了,但现在关键是为何这个java进程占有了这么多句柄,为何有这么多(355个)的sockname: AF_INET 0.0.0.0 port: 0,这个pfiles打印出来的,IP为0.0.0.0,端口为0的socket从没见过,知道这是啥,为何会产生这么多?


是不是Selector对象创建的太多了? --------------------编程问答-------------------- http://blog.csdn.net/haoel/article/details/2224055

看下这个 我前段时间也出这个毛病(看完的时候看评论 这家伙虽然解释清楚了 但是貌似是个喷子...)

首先选择器用完要关闭 其次 没必要开那么多选择器
补充:Java ,  Java相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,