内存泄漏 - 每个请求命中容器中运行的 Flask API 后

2024-06-25

我有一个 Flask 应用程序在 EC2 上的容器中运行。启动容器时,docker 统计数据显示内存使用量接近 48MB。进行第一次 API 调用(从 s3 读取 2GB 文件)后,使用量上升至 5.72GB。即使 api 调用完成后,使用率也不会下降。

在点击请求时,使用量大约增加了文件大小的两倍,并且在几次请求之后,服务器开始提供内存错误 https://i.stack.imgur.com/lyuna.png

此外,在没有容器的情况下运行相同的 Flask 应用程序时,我们没有看到内存使用量有任何增加。

在使用 API 之前输出“docker stats ” https://i.stack.imgur.com/hwRRC.png

使用 API 后输出“docker stats ” https://i.stack.imgur.com/Ggl4V.png

Flask 应用程序 (app.py) 包含-

import os
import json
import pandas as pd
import flask

app = flask.Flask(__name__)


@app.route('/uploadData', methods=['POST'])
def test():
    json_input = flask.request.args.to_dict()
    s3_path = json_input['s3_path']
    # reading file directly from s3 - without downloading
    df = pd.read_csv(s3_path)
    print(df.head(5))
    
    #clearing df
    df = None
    return json_input

@app.route('/healthcheck', methods=['GET'])
def HealthCheck():
    return "Success"

if __name__ == '__main__':
    app.run(host="0.0.0.0", port='8898')

Docker 包含-

FROM python:3.7.10

RUN apt-get update -y && apt-get install -y python-dev

# We copy just the requirements.txt first to leverage Docker cache
COPY . /app_abhi
WORKDIR /app_abhi

EXPOSE 8898

RUN pip3 install flask boto3 pandas fsspec s3fs

CMD [ "python","-u", "app.py" ]

我尝试直接从 S3 读取文件以及下载文件然后读取它,但它不起作用。

任何将内存利用率降低到初始消耗的线索都会有很大的帮助!


您可以尝试以下可能的解决方案:

  1. 更新列的数据类型:Pandas(默认情况下)在创建数据框时尝试推断列数据类型的数据类型。某些数据类型可能会导致大量内存分配。您可以通过更新此类列的数据类型来减少它。例如将整数列更新为pd.np.int8并将列浮动到pd.np.float16。参考这个:读取 3.2 GB 文件时 Pandas/Python 内存峰值 https://stackoverflow.com/questions/38487334/pandas-python-memory-spike-while-reading-3-2-gb-file

  2. 读取数据块:您可以将数据读入一定大小的块中,并对块执行所需的处理,然后继续处理新块。这样您就不会将整个数据存储到内存中。虽然将数据读入块可能比一次读取整个数据慢,但它具有内存效率。

  3. 尝试使用新库:Dask DataFrame 用于通常需要 Pandas 的情况,通常是当 Pandas 由于数据大小或计算速度而失败时。但你可能在 Dask 中找不到很多内置的 pandas 操作。https://docs.dask.org/en/latest/dataframe.html https://docs.dask.org/en/latest/dataframe.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存泄漏 - 每个请求命中容器中运行的 Flask API 后 的相关文章

  • jQuery.remove(),分离 DOM 元素,但我仍然可以从代码中访问这些元素。如何避免泄漏?

    我知道 在具有大量 UI 元素且完全基于 Ajax 的应用程序中正确管理内存并不容易 在我的应用程序中 页面永远不会重新加载 但我想了解以下行为 我有一个根元素 一次必须附加一个子元素 将其视为根元素是应用程序容器 子元素是单个页面 每当我
  • Pandas DataFrame - 列 whos dtype=='category' 上的聚合导致性能下降

    我使用内存使用量较高的大数据帧 并且我读到 如果更改重复值列上的数据类型 我可以节省大量内存 我尝试了一下 确实内存使用量下降了 25 但随后我遇到了我无法理解的性能缓慢问题 我对 dtype 类别 列进行分组聚合 在更改 dtype 之前
  • Flask-SQLAlchemy 构造函数

    在 Flask SQLAlchemy 教程中 定义了 User 模型的构造函数 from flask import Flask from flask ext sqlalchemy import SQLAlchemy app Flask na
  • Pandas 中的 Vlookup 具有近似匹配

    我需要对两个 pandas 数据框进行 vlookup 样式操作 Excel 中的 Vlookup 函数有一个额外的参数 是否应查找近似匹配或精确匹配 为了精确匹配 我知道我可以使用 join 函数 但是我该如何进行近似匹配以找到下一个更大
  • Flask 从线程中删除会话变量

    我尝试实施投票系统 它的工作原理是这样的 如果用户对帖子进行投票 我会在会话变量中记录其临时状态 已投票 已加星标等 如果当前用户在我将结果保存到临时表之前尚未投票 用户可以在 5 分钟内更改投票 5 分钟后 结果将使用线程永久写入数据库
  • Pandas 如何删除包含所需字符串的行

    我想删除包含所需字符串的所有行 假设我有以下数据框 A B C 1 a x w g n 3 l p j p v 我想删除包含字符串的所有行p 我已经搜索过它 但大多数答案都是基于列名称 就我而言 我不会知道它可以出现在任何列中 输出数据帧应
  • python-polars 通过分隔符将字符串列拆分为许多列

    在 pandas 中 以下代码会将 col1 中的字符串拆分为许多列 有没有办法在极地做到这一点 d col1 a b c d a b c d df pd DataFrame data d df a b c d df col1 str sp
  • 根据给定列表中的值替换列中的值[重复]

    这个问题在这里已经有答案了 我在数据框中有一列 仅允许定义列表中存在的值 例如 给定列表 l1 1 2 5 6 如果列表中不存在列中的值 我需要将每个值替换为 0 column Expected column 1 1 5 5 2 2 3 0
  • 本地管理的广播接收器泄漏?

    当应用程序被系统杀死时 本地 即使用 LocalBroadcastManager 管理 BroadcastReceiver 是否有可能泄漏 我需要它的具体用例是我想在活动的 onCreate onDestroy 中注册 注销 Broadca
  • 检查多个 pd.DataFrame 是否相等

    是否有一种 Pythonic 方式 无循环或递归 来检查是否超过两个pd DataFrames 例如 pd DataFrames 列表 彼此相等吗 就像是 all x equals dfs 0 for x in dfs with dfs数据
  • Qcut Pandas:ValueError:Bin 边缘必须是唯一的

    我使用 Pandas 中的 Qcut 将数据离散化为大小相等的存储桶 我想要有价格桶 这是我的数据框 productId sell prix categ popularity 11997 16758760 0 28 75 50 524137
  • 部署 Flask 应用程序时如何检测额外文件的更改并重新加载应用程序? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 Flask 中构建了一个小型 Web 应用程序 并尝试将其部署在 Pythonanywhere 上 在开发过程中
  • 从 pandas 数据框中删除 NaN 值并重塑表[重复]

    这个问题在这里已经有答案了 给定一个包含列的数据框NaNs 如何转换数据框以删除所有NaN从列中 示例数据框 import pandas as pd import numpy as np dataframe from list of lis
  • 如何准备图像分类的训练数据

    我是机器学习新手 在图像分类方面遇到一些问题 使用简单的分类器技术 K 最近邻居 我试图区分猫和狗 到目前为止我的代码 import pandas as pd import numpy as np import seaborn as sns
  • AADSTS65001:用户或管理员尚未同意使用 ID 为 的应用程序

    我正在开发一个使用 Microsoft 的 OAuth2 代表用户流程 的 Angular Flask 应用程序 我试图从后端调用 API 但出现异常 这是配置app module ts export function MSALInstan
  • 如何读取Flask函数中隐藏的表单数据[重复]

    这个问题在这里已经有答案了 我正在为 Flask 应用程序做一个作业 该应用程序的函数根据 index html 页面上表单中隐藏字段的值执行不同的操作 我只有两条路线 index html 和 process 对index html执行操
  • 两个或多个数据框的完全外连接

    给定以下三个 Pandas 数据框 我需要像 SQL 完全外连接一样合并它们 注意key是多索引的type N and id N with N 1 2 3 import pandas as pd raw data type 1 0 1 1
  • Pandas 删除时间范围之外的行

    我试图遍历 DataFrame 索引中的每一行并删除不在特定时间之间的所有行 我一直在寻找解决方案 但它们都没有将日期与时间分开 我想做的就是删除时间范围之外的行 您可以使用between time https pandas pydata
  • “内存泄漏”剖析

    从 NET 角度来看 什么是内存泄漏 https en wikipedia org wiki Memory leak 如何确定您的应用程序是否存在泄漏 有什么影响 如何防止内存泄漏 如果您的应用程序存在内存泄漏 当进程退出或被终止时它会消失
  • 映射 2 个数据帧并替换目标数据帧中匹配值的标头

    我有一个数据框 df1 SAP Name SAP Class SAP Sec Avi 5 C Rison 6 A Slesh 7 B San 8 C Sud 7 B df2 Name Fi Class Avi 5 Rison 6 Slesh

随机推荐

  • 如何从单个元素创建切片而不复制该元素?

    我有一个非常大的结构 在堆上和堆栈上 我在函数中使用 大多数时候 我想要该结构的一个简单变量 因为我直接对大结构进行操作 然而 在某一时刻 我被迫 通过函数签名 将此结构传递到切片内部 struct VeryBig Vec
  • Android Studio断点交叉解释

    我正在 Android Studio 中使用断点调试我的 Android 项目 我注意到有时我的断点中有一个十字并且不会暂停执行 在 intellij 网站上 这被解释为 显示何时在注释或不可执行的行上设置断点 表明不会命中此类断点 谁能告
  • 为 std::reference_wrapper 分配一个值

    我们如何为包裹的项目分配一个值std reference wrapper int a 0 1 2 3 4 std vector
  • 在 TypeScript 中使用高阶组件来省略使用时的 React 属性

    我正在尝试在 TypeScript 中编写一个高阶组件 它接受一些 React 组件类 包装它 并返回一个省略了声明的属性之一的类型 这是我尝试过的 interface MyProps hello string world number i
  • Google 登录服务器验证码无 iOS?

    我们让 Google 登录您的应用程序 我们在请求登录时提供服务器客户端 ID 我们得到的 user serverAuthCode 为 nil 我们的要求如下 func googleLogin var configureError NSEr
  • 访问Expo SQLite数据库的物理存储

    我正在 expo CLI 下使用 React Native 开发一个 android 应用程序 我正在尝试使用 expo sqlite 库创建并写入数据库 我的测试环境是我的 Android 手机 通过扫描浏览器上的 Metro 捆绑包中显
  • AngularJS - 成功返回 $http.post

    我使用 AngularJs 我需要在 http post 连接后返回数据 这是代码 app controller PrincipalController http scope function http scope scope myData
  • 如何使用 C# 打开 Putty 会话

    我想知道如何在 Visual Basic Express 中使用 C 打开 putty 然后通过 ssh 会话执行命令 您可以使用 plink exe 进行 SSH 使用 pscp exe 进行 SCP https www chiark g
  • MYSQL:如何从姓氏中找到player_id?

    我现在尝试使用非标准化 摘要 表中的数据填充 testMatch 表 如下 测试匹配表 Field Type Null Key Default Extra match id int 11 NO PRI NULL match date dat
  • Angular 8 @HostListener('window:scroll', []) 不起作用

    我尝试使用 HostListener 跟踪滚动位置以更改标题的颜色 我的标头组件如下 import Component OnInit Input HostListener Inject from angular core import DO
  • Objective C:在 gdb 中哪里可以找到

    我正在尝试使用 NSZombie 调试我的程序 调试器确实返回了存在问题的实例的地址 但是我不确定在哪里获取运行命令 shell malloc history 所需的 pid 谁能告诉我在这种情况下使用的正确 pid 是什么 我尝试了 32
  • 无法从heroku访问API整个JAR已部署

    JAR已成功部署到heroku 来自命令行的消息 偏僻的 https minmint herokuapp com https minmint herokuapp com 部署到 Heroku 我的代码片段 RestController Re
  • 在 C# 中的用户控件中公开并引发子控件的事件

    你好 我有一个包含文本框的用户控件 我想访问文本框的 textchanged 事件 但在用户控件的事件属性中我没有看到文本框的事件 如何使用 C 在 Winforms 中公开公开的 UserControl 公开并处理子控件的特定事件 如果您
  • ConstraintLayout 相对距离百分比 %

    我正在与ConstraintLayout我想设置一个百分比从位于屏幕 52 的按钮 2 到 Textview Sample 的边距顶部 3 当然是相对于屏幕的高度而言的 该位置应该与其他 UI 组件相关 仅从屏幕顶部 或底部 参考指南 可以
  • 如何在 Eclipse PDT 中重新格式化多行注释?

    In Eclipse PDT Ctrl Shift F重新格式化代码 但是 它根本不修改评论 有没有办法将参差不齐的多行注释重新格式化为每行 80 个字符 或其他 即转换 We took a breezy excursion and gat
  • Shopware 6 在计划任务中获取上下文

    我只是想知道如何获取计划任务中的上下文 有静态方法 Context createDefaultContext 但它被标记为内部 我知道不应该创建上下文 而应该从更高的服务传递到您的服务 但这在计划任务中似乎不可能 我想我在 GitHub 问
  • 数据记录的类约束

    我有一个data type data BuildException a KillBuild JobID a Stage FailBuild JobID a Stage CancelBuild JobID a Stage StopBuild
  • Android SearchView 上是否有监听器来通知 SearchView 是否已展开并准备好接受输入?

    当用户未输入任何内容时 我想在 SearchView 中显示一些默认建议 我正在使用矩阵光标手动设置自定义建议适配器 我尝试在 onFocusChange 和 onClickListner 中设置适配器 但建议隐藏在键盘后面 显然建议加载时
  • 移动除一个文件之外的所有文件

    如何移动除一个文件之外的所有文件 我正在寻找类似的东西 mv Linux Old Tux png Linux New 我将旧的东西移动到新的东西文件夹中 除了Tux png 符号代表否定 有一些工具可以完成这项工作吗 如果您使用 bash
  • 内存泄漏 - 每个请求命中容器中运行的 Flask API 后

    我有一个 Flask 应用程序在 EC2 上的容器中运行 启动容器时 docker 统计数据显示内存使用量接近 48MB 进行第一次 API 调用 从 s3 读取 2GB 文件 后 使用量上升至 5 72GB 即使 api 调用完成后 使用