【问题标题】:How can I test server performance?如何测试服务器性能?
【发布时间】:2013-09-11 18:33:09
【问题描述】:

我写了一个小程序来测试我的服务器的性能。该程序每秒向服务器发送 100 个请求,并测量接收答案所需的时间。测试程序是用 Java 编写的,每个请求都由一个单独的线程处理。请求已编号。该数字由服务器退回,以便客户端程序知道哪个请求得到了响应。 我得到的结果到处都是问题。有时回复需要 1 秒,有时 3 秒,有时 10 秒。我不太明白。为什么会出现这种情况?如果我做错了什么,有什么更好的方法来测试我的服务器?

编辑了解更多信息。该服务器是一个 Amazon Elastic Beanstalk 应用程序。它在一个包含 5 个 EC2 实例的集群上运行。它运行一个简单的程序,在发送包含它在请求中收到的数量的响应之前执行一些循环。客户端在发出每个请求时对其进行计时,并将其与收到相应回复所用的时间进行比较。

编辑 2 测试运行 30 分钟,输出是所有时间的平均值。请求之间的结果差异很大,但个人平均值之间的差异也很大。

【问题讨论】:

  • 您的服务器不仅在运行您的应用程序。在任何时候,它都可能在某些文件上运行防病毒软件,下载/应用操作系统更新,服务于您自己以外的请求,或执行任何其他杂项、自我维护任务。如果您想衡量应用在给定环境中的性能,更好的方法是分析它的瓶颈。
  • 如果您的服务器共享一个资源,那么您可能会在服务器端遇到锁争用——因此,请求越多,完成请求所需的时间就越长。最后,您将需要更精细的分析来确定正在发生的事情。
  • @Renan 公平地说,分析不会告诉您响应时间的可预测性,这也很重要。 (当然,OP 没有给我们足够的信息来告诉我们任何结论。)所有分析都告诉您要更改什么以使您的应用程序比它更快。当您知道您的应用程序太慢时,这一点非常重要,但当您不知道是否是这种情况时则不是。
  • @spacitron 你试过对你的数据点做一些基本的统计吗?就像对相同尊重的响应时间的差异是什么?因为如果您有一些异常值但总体方差很低,那么您就不会真正得到“无处不在”的结果。
  • @spacitron 即使它是由 Amazon 托管的虚拟机,它仍然可以做的不仅仅是你告诉它做的事情。

标签: java performance-testing


【解决方案1】:

如果您正在检查网络服务器的性能,您可以使用网格。

更多信息在此页面http://grinder.sourceforge.net/

【讨论】:

    【解决方案2】:

    嗯,您的互联网连接速度可能会有所波动,尤其是当您将它们用于其他用途时。您的服务器也是如此。这就是为什么 ping 不是一个恒定的东西。由于流量变化而导致的任何服务器端操作都可能会影响时间。你的方法应该没问题。

    【讨论】:

      【解决方案3】:

      我认为您在这里尝试的是负载测试。根据数据的性质,处理时间可能会有所不同。例如假设您的服务器正在解析 XML,因此根据 XML 数据的大小,响应时间可能不同。

      我还可以依赖,如果有网络调用(比如 DB 调用或 Web 服务调用),因此取决于 3rd 方响应和网络性能,结果可能会有所不同。

      我相信你测试服务器性能的方式还是可以的,只要你使用广泛的可能数据、边界条件和不同的流程进行测试(基于业务逻辑)。

      其他方法是使用某些工具设置自动负载测试;但根据应用程序的性质和数据类型,这将是一项很好的工作。

      【讨论】:

        【解决方案4】:

        您的服务器位于何处?如果它托管在远程某个地方,那么可能会发生很多事情:托管服务器的同一台机器上的负载可能会有所不同,网络速度可能会有所不同。此外,由于您以 100 个请求/秒的速度轰炸您的服务器,这可能是一项相当繁重的工作。取决于诸如等待共享关键资源之类的许多事情,响应时间应该是这样变化的。简而言之,在不知道您服务器的性质的情况下,我们无法确定。

        我想知道的是,在 100 个请求/秒的负载下,您的服务器在最坏的情况下似乎有 10 秒的响应。你也可以计算平均时间...

        【讨论】: