Linux socket服务的问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 07:50:49
java写的一个服务程序,跑在Linux上,功能是一个socket server,绑定了一个端口,终端会连接到这个端口,每当一个终端连接上来,就起一个线程a处理终端的各种请求。这个服务程序是一个单独的jar包,用sh文件启动。

目前问题是这样的:
这个服务一启动,通过日志会看到那个a线程不停的被启动,大概每秒一个,到最后就会报Too Many Open Files的异常,也就是socket连接太多。其实这时一个终端都没有连接上来。
但是这套程序如果放在本机,或者放到其它Linux服务器,就很正常,没有终端访问,a就绝对不会起;来一个访问,就起一个a。现在程序必须放在出问题的那个服务器上。有谁知道这是为什么?我觉得是服务器的某个设置问题,请各位帮忙!!

1 换个端口试试!

2.要是老是出错,把socket打出来看看,是不是

真有客户端连上,并打出客户端的ip地址。看是不

是来自统一台机器。

检查一下这台机器上的java socket设置,是否错误设置为非阻塞模式了。在该模式下,即使没有外来连接,服务程序的accept()调用并不等待而是直接返回错误值,如果后续代码没有检查该错误值就开始创建线程,则必然导致溢出。