0

我们正在做一些 java 压力运行(涉及网络 IO)。最初一切都很好,系统响应非常快(测试中的平均延迟为 2ms)。但是几个小时后,当我重做相同的测试时,我观察到性能下降(20 - 60 毫秒)。它是相同的 Jar 文件、相同的 JVM 和运行压力的相同 LAN。我不明白这种行为的原因。

局域网是 1GBPS,对于压力要求,我确定我们没有全部使用它。

所以我的 QN:

  1. 可能是因为局域网中的一些开关吗?
  2. 一段时间后机器是否变慢(机器重新启动..说大约 6 个月前压力开始之前;它们是 RHEL5,XEON 64 位四核)
  3. 调试此类问题的一般方法是什么?

请问有什么帮助吗?

——拉维

4

2 回答 2

0

一般的方法是“衡量一切”。这尤其可能意味着:

  1. 确保所有服务器上的时间相同(使用 ntp 或类似的东西);
  2. 测量生成请求需要多长时间(如果请求生成器有错误怎么办?);
  3. 测量请求何时离开客户端机器,或者至少需要多长时间来执行 i/o。有时,知道许多请求所需的平均时间就足够了。
  4. 测量请求何时到达。
  5. 衡量产生响应所需的时间。
  6. 测量发送响应需要多长时间。

您可能可以从第 5 个元素开始,因为这是(您相信)您的关键链。但最好尽可能多地记录——根据你自己所说的,产生不同的结果需要几天的时间。

如果您不想修改代码,请寻找可以在不干预的情况下嗅探数据的情况(例如,在您的 web.xml 中定义一个 servlet 过滤器)。

于 2010-02-22T14:34:56.933 回答
0

几个问题...

有多少环境在您的控制之下,您是否采取了任何措施来确保每次运行都保持一致?即您是否与其他系统共享网络,您使用的机器是否仅用于压力测试?

我看待这个的方式是开始收集有关您的机器和代码的详细信息。这意味着使用 perfmon (windows) sar (unix) 来找出操作系统和硬件正在做什么,并附加一个分析器以确保您的代码正在做同样的事情并帮助从代码角度查明瓶颈发生在哪里.

没有什么非常详细的,但我希望能帮助你入门。

于 2010-02-22T05:22:52.563 回答