我正在尝试检测服务器中的瓶颈,但我很难决定从哪里开始。机器崩溃之前的症状是连接断开(超时,这是当客户端看到响应时间过长时发生的情况,可能表明服务器端代码无法分配处理器,并且请求无法完成)无法处理)和内存不足问题。后一个错误代码实际上是由 JVM 在错误日志中给出的,但我很难相信 RAM 和可用 CPU 的缺乏同时成为瓶颈。 (在之前崩溃的日子里,它一直以上述方式崩溃。)我们有自己的内部服务器代码,我不会将其归类为类似于 Apache 或我见过的任何其他代码。 (抱歉,如果这会使提供建议变得更加困难。)
我想花一些时间在本地创建一个稍微受控的测试。我正在运行服务器,并且正在创建一个程序,该程序将从本地服务器请求不同的内容。监控 RAM/CPU 的好方法是什么?我目前正在使用 Java 的 VisualVM,但是当我用一些测试来锤炼它时,监视器停止响应。
任何想法都将不胜感激。正如我提到的,我正在尝试获取尽可能多的有用数据,以帮助我进一步排除故障。一般来说,当出现这样的瓶颈问题时,可以采取哪些一般策略?实时服务器均运行在Windows Server 2008上。Java版本为7.03。我的本地机器运行的是 Windows 7,也运行 Java 7.03。我不想做太多假设,但我认为假设 Server 2008 和 Windows 7 非常相似是合理的。 (操作系统架构是相同的。)除此之外,我的本地机器具有与我们的服务器相同的硬件。
最佳答案
对于 Windows,您需要:
1)建立“绩效基线”
2)尝试重现瓶颈,并将压力下的行为与基线进行比较
3)找出瓶颈的原因并纠正它。
这些链接会有帮助:
http://technet.microsoft.com/en-us/library/cc781394%28v=ws.10%29.aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/gg463394.aspx
您还应该查看这些 TCP/IP 注册表设置:
增加临时端口的范围
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters、MaxUserPort
考虑禁用自动调整:
关于java - 运行服务器瓶颈测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12322962/