所以基本上问题在标题中描述.服务器以下列方式工作:
服务器代码与本教程类似(一切都在try/catch中,遗憾的是我无法显示源代码 - 公司策略)
它似乎运行得很好,直到客户端数量超过~50,然后它只挂起没有异常/警告/等.有一个cpu线程限制为32k,没有限制打开文件/打开套接字/等等OS = CentOS 5.5(在ubuntu中似乎也是如此).服务器使用ODBC将数据记录到MySQL.两者的单独压力测试表明我可以拥有多达32k的java进程(受/ proc/sys/kernel/threads-max限制),而MySQL可以执行高达20k的简单操作/秒,所以我假设问题在于套接字.
所以问题确实是:
您可能会在代码中的某处导致死锁.这里的关键指标是,如果"挂起",则意味着服务器的CPU使用率降至零,并且服务器中没有看到进一步的活动.
当服务器挂起运行jdk工具:jstack对它的进程.这应该会告诉你什么在等什么锁.同样在工具包中是jvisualvm,如果在unix框中,一个简单的kill -3 pid将执行到stderr的线程转储.
没有代码或至少一个可重复的样本我恐怕我不能帮助更多.你可能想要看到的一件事是使用jetty作为你的嵌入式服务器而不是手持式服务器,它们已经经历了死锁/线程的痛苦,所以你不必这么做.
| 归档时间: |
|
| 查看次数: |
1874 次 |
| 最近记录: |