所以基本上问题在标题中描述。 服务器以下列方式工作:
服务器代码类似于this tutorial(一切都在try / catch中,遗憾的是我无法显示源代码 - 公司政策)
它似乎运行得很好,直到客户端数量超过~50,然后它就会挂起,没有异常/警告/等等。有一个cpu线程限制为32k,打开文件数量没有限制/打开套接字/等OS = CentOS 5.5(在ubuntu tho中似乎也是如此)。服务器使用ODBC将数据记录到MySQL。两者的单独压力测试表明我可以拥有多达32k的java进程(受/ proc / sys / kernel / threads-max限制),而MySQL可以执行高达20k的简单操作/秒,所以我假设问题在于套接字
所以问题确实是:
答案 0 :(得分:5)
您可能在代码中的某处导致了死锁。这里的关键指标是,如果“挂起”,则意味着服务器的CPU使用率降至零,服务器中没有进一步的活动。
当服务器挂起对其进程运行jdk tool: jstack时。这应该会告诉你什么在等什么锁。工具包中还有jvisualvm,如果在unix框中,一个简单的kill -3 pid
将向stderr执行一个线程转储。
没有代码或至少是可重复的样本,恐怕我无法帮助更多。您可能希望看到的一件事是使用jetty作为您的嵌入式服务器而不是手持式服务器,它们已经遇到了死锁/线程故障,因此您不必这样做。
答案 1 :(得分:0)
不知道这是否对您有所帮助,如果您正在使用它,但尝试使用java开关“ -server ”运行套接字服务器,则会选择Java HotSpot Server VM。 -server打开优化JIT以及一些其他“服务器级”设置。通常,您可以从此设置中获得最佳性能。默认VM是-client。
同时检查您的其他参数,以便您的套接字服务器不会以最少的资源运行 祝你有愉快的一天