这是一个开放式的问题,但我正在寻找一个开放式答案。我正在寻找一种资源,可以帮助解释如何对不同的系统进行基准测试,但更重要的是如何分析数据并根据结果做出明智的选择。
在我的特定情况下,我有一个 4 服务器设置,其中包括用作 iOS 游戏后端的 mongo。所有服务器都运行 Ubuntu 11.10。我读过许多文章,这些文章提出了诸如"如果 CPU 利用率很高,请进行此更改"之类的建议。作为后端架构的新手,我对"高 CPU 利用率"是什么没有概念。
我正在使用Mongo的监控服务(MMS(,我正在收集一些关于它的信息,但我不知道如何做出选择或识别瓶颈。其他服务器为从游戏客户端到mongo的请求提供服务,但我不太确定我应该如何对它们进行基准测试或记录重要信息。我还使用 Amazon 的 EC2 来托管我的所有实例,这也提供了一些信息。
所以,一些问题:哪些统计信息对于登录后端设置很重要?(中央处理器、内存等(
监控这些统计数据的好方法是什么?
如何分析统计数据?(RAM 使用率高/读取请求低等(
在尝试为我的架构创建压力测试或基准测试脚本之前,我应该了解哪些提示?
同样,如果有一个资源可以回答其中的许多问题,我在这里不需要解释,我只是无法自己找到一个。
如果有关我的设置的更多详细信息有帮助,我也可以提供这些详细信息。
谢谢!
我喜欢将性能测试视为一个小型项目,因为存在现实世界的需求。从要解决的问题开始:是否担心响应时间太慢,用户的游戏体验会很差?还是担心会在不必要的服务器硬件上花费太多钱?
简而言之,是什么推动了对性能测试的需求?此练习有时称为"确定要解决的问题"。这是关于要实现的目标 - 因为如果没有目标,为什么要经历测试性能的所有工作?确定要解决的问题最终将驱动要测量的内容以及如何测量它。
确定问题后,下一组是写下必须回答哪些问题才能知道何时达到目标。例如,如果目标是确保响应时间足够短以提供良好的游戏体验,那么我想到的一些问题是:
- 在游戏体验变得令人无法接受的糟糕之前,最长响应时间是多少?
- 与零无法区分的最大响应时间是多少?也就是说,如果用户感觉 200 毫秒的响应时间与 1 毫秒的响应时间相同,则响应时间的下限为 200 毫秒。
- 必须考虑哪些客户端硬件?例如,如果游戏仅在iOS 5设备上运行,则无需测试第一代iPhone,因为第一代iPhone无法运行iOS 5。
这些只是我想出的几个问题作为例子。一个完整、深思熟虑的列表可能看起来大不相同。
写下问题后,下一步是确定哪些指标将提供问题的答案。您可能已经遇到了很多指标:响应时间、每秒事务数、RAM 使用率、CPU 利用率等。
选择一些适当的指标后,编写一些测试方案。这些是测试的简单英文描述。例如,测试方案可能涉及针对特定游戏关卡上的特定游戏设置组合,使用特定设备或特定版本的 iOS 同时模拟一定数量的游戏。
编写方案后,请考虑为模拟服务器工作负荷的任何工具编写测试脚本。然后运行脚本为所选指标建立基线。
建立基线后,更改参数并绘制结果图表。例如,如果所选指标之一是 CPU 利用率与每秒进入服务器的 TCP 数据包数,请制作一个图表来了解利用率如何随着数据包/秒从 0 到 10,000 的变化。
通常,观察实验的自变量调整时性能会发生什么变化。使用这些硬数据来回答流程早期创建的问题。
我在谷歌上搜索了"软件性能测试方法",发现了几个很好的链接:
- 查看此白皮书 性能测试方法 作者:Johann du Plessis
- 看看这篇维基百科文章的方法论部分。