烧瓶应用程序 - 100% 的内存和 CPU 消耗

Posted

技术标签:

【中文标题】烧瓶应用程序 - 100% 的内存和 CPU 消耗【英文标题】:flask application - 100% memory and cpu consumption 【发布时间】:2020-02-22 07:59:12 【问题描述】:

在我的烧瓶应用程序中,我们观察到非常高的内存和 cpu 消耗几乎 100% 的 CPU 和内存用于 API 调用之一。我们正在使用 flask-rest-json api 包。在我们的模型中,我们有许多表格,例如

表 A - 父级 表 B - A 的子表(表 a id 为 FK) 表 C - B 的子级(表 C id 为 FK)---> 非常高的内存/CPU

除了上表之外,我们还有许多其他相关的表(父子表)。

表 A 就像录制会话,其中包含许多视频(表 B),其中包含许多图像(表 C)。因此,对于 30 分钟的录制会话,我们有 30 个视频片段,然后是 30 * 30 = 900 个图像。

我们使用 db.relationship 在表之间创建了关系,因此我们也可以使用过滤器操作。

一旦我们触发了具有高 cpu/内存使用率的 url,wsgi 进程就会杀死自己然后重新启动。

请让我知道调试此问题。我们怀疑数据库关系存在问题。

【问题讨论】:

【参考方案1】:

您是否将视频数据作为 BLOB 直接存储在数据库中?别。 如果是这样,只需将视频作为一个单独的文件存储在一个文件夹中,以及数据库中视频的路径即可。

如果您没有真正说出端点在做什么,那就无能为力了。复杂的关系可能不是您的问题。

【讨论】:

谢谢。如前所述,图像或视频不是存储为 blob 而是存储为 db 中的 url。我正在使用 nginx 来提供视频或图像文件,这可能不是问题。我在我的模型中使用了多个关系,如下所示。 videoclips = db.relationship('VideoClip', backref='images', lazy='joined') 是否与使用 Joined 参数有关。我已经加入了使用flask-rest-jsonapi包的关系过滤器。 嗯,您可能想研究一些循环查找问题?比如,也许您正在构建一个基于以 catch-22 方式相互交互的关系的查询,这样它们就无法解析,除非它们都得到解决......

以上是关于烧瓶应用程序 - 100% 的内存和 CPU 消耗的主要内容,如果未能解决你的问题,请参考以下文章

如何诊断和解决CPU高度消耗(100%)的数据库

Akka IO 应用消耗 100% cpu

纱线构建消耗 100% CPU

Valgrind 挂在 pthread_spin_lock 消耗 100% CPU

SQL占用了CPU将近100%的资源

为啥我的程序在 nVidia NView 下会消耗 100% CPU?