gpt4 book ai didi

mysql - Web请求性能在压力下真的很差

转载 作者:行者123 更新时间:2023-11-29 03:07:28 24 4
gpt4 key购买 nike

我使用 python 和 Flask 框架编写了一个 Web 应用程序,并使用 mod_wsgi 在 Apache 上进行了设置。今天我使用 JMeter 对此应用程序执行一些负载测试。对于一个网址:

  • 当我只设置1个线程发送请求时,响应时间为200ms

  • 当我设置20个并发线程发送请求时,响应时间增加到4000多毫秒(4秒)。这是 Not Acceptable !

为了找出问题所在,所以在flask的before_request和teardown_request方法中记录了时间。事实证明,处理请求所花费的时间刚刚超过 10 毫秒。

在这个 URL 处理程序中,应用程序只是在 Mysql 数据库中执行一些 SQL 查询(大约 10 个),没有什么特别的。

为了测试问题是出在 web 服务器还是框架配置上,我在同一个 flask 应用程序中写了另一个方法 Hello,它只返回一个字符串。它在负载下表现完美,响应时间为 13ms,20 线程并发。

在进行负载测试时,我在服务器上执行“top”,大约有 10 个 apache 线程,但 CPU 大部分时间都处于空闲状态。

我现在已经无计可施了。即使请求是串行执行的,性能也不应该下降得这么厉害……我的猜测是在某个地方有一些我不知道的排队,除了处理请求之外肯定还有开销。

如果您有调整 Web 应用程序性能的经验,请提供帮助!

编辑

关于apache的配置,我用的是MPM worker模式,配置:

<IfModule mpm_worker_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 50
MaxClients 200
MaxRequestsPerChild 0
</IfModule>

至于 mod_wsgi,我尝试打开和关闭 WSGIDaemonProcess(通过注释掉以下行),性能看起来是一样的。

# WSGIDaemonProcess tqt processes=3 threads=15 display-name=TQTSERVER

最佳答案

恭喜!您发现了性能问题 - 而不是您的用户!

分析 Web 应用程序的性能问题通常很困难,因为有太多事件部件,并且很难在应用程序运行时看到它的内部。

您描述的行为通常与瓶颈资源有关 - 当特定资源无法跟上时会发生这种情况,因此对请求进行排队,这往往会导致响应时间出现“曲棍球棒”曲线 - 一旦您达到这个资源跟不上的地步,响应时间会很快上升。

20 个并发线程似乎不足以实现这种情况,除非您在页面上做很多非常繁重的工作。

首先从 TOP 开始 - 当 CPU 不足时,内存、磁盘访问等在做什么?您的数据库是否在同一台机器上运行?如果不是,TOP 在数据库服务器上说什么?

假设这不是一些愚蠢的硬件问题,下一个最有可能的问题是该页面上的数据库访问。当您只需要一条记录时,一个查询可能实际上返回了整个数据库(这是 ORM 解决方案中一种相当常见的反模式);这可能会导致您描述的行为。我会使用 Flask 日志记录框架来记录您的数据库调用(开始、结束、返回的记录数),并在那里查找异常情况。

如果数据库在负载下表现良好,则要么是框架要么是应用程序代码。同样,在代码中使用日志语句来跟踪各个代码块的执行时间,并继续寻找...

它并不迷人,而且可能真的很乏味 - 但最好在上线前找到它!

关于mysql - Web请求性能在压力下真的很差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13181114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com