【问题标题】:Java Socket Server Stops Responding To All ConnectionsJava Socket 服务器停止响应所有连接
【发布时间】:2011-01-28 10:34:05
【问题描述】:

我有一个 java 套接字服务器,它接受来自 flash 客户端的连接并将消息发送到连接到游戏的其他 flash 客户端,它还将一些位记录到 MySQL 数据库。服务器工作正常,直到客户端数量超过〜100,然后它突然停止响应所有连接,它也不接受新连接,只有重新启动才能再次工作。服务器使用多线程,因此它为每个客户端生成一个新线程。当前的物理服务器有 16 个处理器和 ~ 4gb 的 RAM(即使它没有使用那么多)。我尝试使用 -Xms -Xmx -server /etc 命令行属性运行服务器,但没有任何帮助。

jstack 没有显示任何异常(或者我看不到,如果需要,我也可以发布它),除了它卡在代码的服务器线程部分中的以下 readByte() 处(第 59 行):

while(((cr = streamIn.readByte()) != EOF))
    {
     if(amount < 100)
     {
      a+=(char)cr;
      amount++;
     }
     else
      break;
    }

编辑:显然不需要所有代码 - 当它收到 EOF 异常时,它的 readByte() 会主动阻塞。现在我会问另一个关于如何解决它的问题。

【问题讨论】:

  • 对此很抱歉,我不确定我能做些什么......

标签: java sockets


【解决方案1】:

快速猜测:

快速反应是您达到了 DB 的 100 个连接限制。查看更多 - http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

一些一般性提示:

  • 尝试使用 ExecutorService 进行线程管理,
  • 使用蔚来,
  • 验证数据库连接是否关闭

【讨论】:

  • 是的,我的数据库连接很好,-我的.cnf 中有“max_connectons = 4096”,连接一直在打开和关闭,我很久以前做过的快速测试表明我可以有至少 500 个并发连接同时更新数据库(使用 InnoDB)。现在来看看 ExecutorService 和 NIO。感谢您的评论。
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
相关资源
最近更新 更多