我正在尝试检测服务器中的瓶颈,而我很难决定从哪里开始。机器崩溃之前的症状是连接丢失(超时,这是当客户端看到响应时间过长时发生的情况,可能表示服务器端代码无法分配处理器,请求无法没有处理)和内存不足的问题。后面的错误代码实际上是由JVM在错误日志中给出的,但我很难相信RAM和缺少可用的CPU同时成为瓶颈。 (在之前崩溃的时代,它一直以上述方式崩溃。)我们有自己的内部服务器代码,我不会将其归类为类似于Apache或我见过的任何其他代码。 (对不起,如果这使得建议更加困难。)
我想花一些时间在本地创建一个有点受控制的测试。我正在运行服务器,我正在创建一个程序,它将从本地服务器请求不同的东西。什么是监控RAM / CPU的好方法?我目前正在使用Java的VisualVM,但是当我使用某些测试时,监视器会停止响应。
任何想法都会非常感激。就像我提到的那样,我正在尝试获取尽可能多的有用数据,以帮助我进一步排除故障。一般来说,当出现这样的瓶颈问题时,采取什么样的一般策略?实时服务器都在Windows Server 2008上运行.Java的版本是7.03。我的本地盒子运行的是Windows 7,也有Java 7.03。我不想做太多的假设,但我认为假设Server 2008和Windows 7非常相似是合理的。 (操作系统架构是相同的。)除此之外,我的本地机箱与我们的服务器具有相同的硬件。
答案 0 :(得分:1)
对于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
考虑禁用自动调整: