【发布时间】:2020-11-24 17:10:12
【问题描述】:
我有一个高性能的软件服务器应用程序,预计在未来几个月内流量会增加。
我想知道最好使用哪种方法或方法来衡量服务器是否仍有能力处理这种增加的负载?
【问题讨论】:
标签: performance performance-testing capacity capacity-planning
我有一个高性能的软件服务器应用程序,预计在未来几个月内流量会增加。
我想知道最好使用哪种方法或方法来衡量服务器是否仍有能力处理这种增加的负载?
【问题讨论】:
标签: performance performance-testing capacity capacity-planning
我会首先收集关键资源的基线数据——通常是 CPU、内存使用情况、磁盘使用情况、网络使用情况——并随着时间的推移跟踪它们。如果这些资源中的任何一个显示出规律的峰值,它们在不到一秒的时间内保持 100% 的容量,那么在当前使用情况下,您在某个地方遇到了瓶颈。在这种情况下,您无法在没有可能中断的情况下接受额外负载。
接下来,我将开始弄清楚您的应用程序的瓶颈资源是什么 - 它因应用程序而异,但在大多数情况下,它是阻碍您进一步扩展的瓶颈资源。例如,您的 CPU 可能几乎处于空闲状态,但您正在处理磁盘 I/O。这是一个棘手的过程 - 负载和压力测试是要走的路。
如果您可以通过购买更好的硬件来解决瓶颈,那就这样做吧 - 它比重写软件便宜得多。如果您不能购买更好的硬件,请查看负载平衡。如果无法进行负载平衡,则必须查看应用程序架构和实现,看看是否有办法解决瓶颈。
瓶颈从一种资源转移到另一种资源是很典型的——你需要 CPU 来运行,但现在当你增加流量时,你会增加磁盘 I/O;一旦你解决了这个问题,你可能会遇到另一个 CPU 挑战。
【讨论】:
我认为您正在寻找Stress Testing,场景将类似于:
创建模拟当前实际应用程序使用情况的负载测试
从当前用户数开始,逐渐增加负载,直到
- 您达到了“增加的流量”数量
- 或开始出现错误
- 或者您开始观察到性能下降
先到先得
根据结果,您可以声明您的服务器可以毫无问题地处理增加的负载,或者您将提出saturation point 和first bottleneck
您可能还想执行Soak Test - 让系统长时间处于高负载状态数小时或数天,这样您就可以检测到memory leaks 或其他容量问题。
【讨论】:
用十分之一的数据和流量来测试产品。确保活动是“现实的”。
然后考虑一下随着流量的增长会发生什么——RAM、磁盘、cpu、网络等是否线性增长?
在执行此操作时,请寻找“热点”。优化它们。
你会使用网页吗?数据库?等等。这些东西中的每一个都有不同的规模。 (换句话说,你的问题没有提供足够的细节。)
大多数标准基准只关注计算的一个小方面;将结果应用于特定应用程序是不确定的。
【讨论】: