【发布时间】:2013-09-11 18:33:09
【问题描述】:
我写了一个小程序来测试我的服务器的性能。该程序每秒向服务器发送 100 个请求,并测量接收答案所需的时间。测试程序是用 Java 编写的,每个请求都由一个单独的线程处理。请求已编号。该数字由服务器退回,以便客户端程序知道哪个请求得到了响应。 我得到的结果到处都是问题。有时回复需要 1 秒,有时 3 秒,有时 10 秒。我不太明白。为什么会出现这种情况?如果我做错了什么,有什么更好的方法来测试我的服务器?
编辑了解更多信息。该服务器是一个 Amazon Elastic Beanstalk 应用程序。它在一个包含 5 个 EC2 实例的集群上运行。它运行一个简单的程序,在发送包含它在请求中收到的数量的响应之前执行一些循环。客户端在发出每个请求时对其进行计时,并将其与收到相应回复所用的时间进行比较。
编辑 2 测试运行 30 分钟,输出是所有时间的平均值。请求之间的结果差异很大,但个人平均值之间的差异也很大。
【问题讨论】:
-
您的服务器不仅在运行您的应用程序。在任何时候,它都可能在某些文件上运行防病毒软件,下载/应用操作系统更新,服务于您自己以外的请求,或执行任何其他杂项、自我维护任务。如果您想衡量应用在给定环境中的性能,更好的方法是分析它的瓶颈。
-
如果您的服务器共享一个资源,那么您可能会在服务器端遇到锁争用——因此,请求越多,完成请求所需的时间就越长。最后,您将需要更精细的分析来确定正在发生的事情。
-
@Renan 公平地说,分析不会告诉您响应时间的可预测性,这也很重要。 (当然,OP 没有给我们足够的信息来告诉我们任何结论。)所有分析都告诉您要更改什么以使您的应用程序比它更快。当您知道您的应用程序太慢时,这一点非常重要,但当您不知道是否是这种情况时则不是。
-
@spacitron 你试过对你的数据点做一些基本的统计吗?就像对相同尊重的响应时间的差异是什么?因为如果您有一些异常值但总体方差很低,那么您就不会真正得到“无处不在”的结果。
-
@spacitron 即使它是由 Amazon 托管的虚拟机,它仍然可以做的不仅仅是你告诉它做的事情。