【发布时间】: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() 会主动阻塞。现在我会问另一个关于如何解决它的问题。
【问题讨论】:
-
对此很抱歉,我不确定我能做些什么......