热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

每个API调用FlaskApp内存泄漏

如何解决《每个API调用FlaskApp内存泄漏》经验,如何解决这个问题?

我的Flask API有一个很小的内存泄漏,在许多API调用中导致我的应用程序达到内存限制并崩溃.我一直试图找出为什么一些记忆没有被释放到目前为止没有成功,我相信我确实知道消息来源.我很感激任何帮助!

不幸的是我无法分享代码但是用英语描述它,我的烧瓶应用程序为用户提供了一个API端点,可以执行以下操作(一次性调用):

    根据提供的ID从MongoDB中提取一些数据.

    根据返回的内容,使用python-docx库构建文档对象并将其保存到磁盘

    最后,我将保存到磁盘的内容上传到S3存储桶,然后删除磁盘上的内容

据我所知,使用memory_profiler库,我看到内存使用最多的两个区域是Document对象的初始化和连接/保存到S3(分别为7MB和4.8MB).

我正在做的是监视我的Python进程的内存使用情况,我正在使用psutils打印出在某些关键点使用的rss内存(下面的示例代码).

process = psutil.Process(os.getpid())
mem0 = process.memory_info().rss
print('Memory Usage After Action',mem0/(1024**2),'MB')

## Perform some action

mem1 = process.memory_info().rss
print('Memory Usage After Action',mem1/(1024**2),'MB')
print('Memory Increase After Action',(mem1-mem0)/(1024**2),'MB')

提供的控制台图像是在我在本地托管应用程序三次之后调用该应用程序.令人担忧的是,每个顺序API调用似乎都是在最后一次调用离开内存使用量的位置或之上开始并继续添加到它上面应用程序从93MB开始(参见黄色高亮显示)但在第一次调用之后它以103.79结束MB,第二个起始于103.87MB,结束时为105.39MB,第三个起始于105.46Mb,最终为106MB.使用量减少但在100次调用后我仍然看到增量内存使用量.红色和蓝色线显示API调用期间各个点的内存更改.红线在文档构建之后,蓝线在S3上载之后.

请注意,我的测试程序每次都使用相同的参数调用API.

除其他外,我测试了以下内容:

    所以GC.Collect()

    使用'del'显式删除变量/对象引用

    确保mongo连接关闭(因为我使用IBM_Botos3库进行S3连接,我不知道是否有办法明确关闭此连接)

    我没有为每个API调用保存的全局变量(app是唯一的全局变量)

我知道,因为我无法提供代码,所以可能没有什么可以离开这里但是如果没有想法我想知道是否有一种最佳实践方法来处理烧瓶内存使用或在烧瓶功能返回之后清除内存的方法.现在我的烧瓶功能是相对标准的Python函数(因此我希望此函数中的局部变量在之后被垃圾收集).

我正在使用Python 3.6,Flask 0.11.1和pymongo 3.6.1,我的测试现在是在Windows 7机器上,但我的IBM云服务器看到了同样的问题.


推荐阅读
  • 手机上编写和运行PHP代码的最佳软件推荐 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • Go语言中Goroutine与通道机制及其异常处理深入解析
    在Go语言中,Goroutine可视为一种轻量级的并发执行单元,其资源消耗远低于传统线程,初始栈大小仅为2KB,而普通线程则通常需要几MB。此外,Goroutine的调度由Go运行时自动管理,能够高效地支持成千上万个并发任务。本文深入探讨了Goroutine的工作原理及其与通道(channel)的配合使用,特别是在异常处理方面的最佳实践,为开发者提供了一套完整的解决方案,以确保程序的稳定性和可靠性。 ... [详细]
  • 需求:在指定的DIV区域内点击时,需展示该区域内的附加操作面板;而在区域外点击时,则应自动隐藏该附加操作面板。通过精准的事件监听与处理,确保用户交互体验的流畅性和直观性。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 在Python 3环境中,当无法连接互联网时,可以通过下载离线模块包来实现模块的安装。具体步骤包括:首先从PyPI网站下载所需的模块包,然后将其传输到目标环境,并使用`pip install`命令进行本地安装。此方法不仅适用于单个模块,还支持依赖项的批量安装,确保开发环境的完整性和一致性。 ... [详细]
  • 深入解析 Unity URP/SRP 渲染管线:匠心打造的全面指南
    本文深入探讨了Unity中的URP、SRP和HDRP渲染管线,详细解析了它们之间的关系及各自的特点。首先介绍了SRP的基本概念及其在Unity渲染架构中的作用,随后重点阐述了URP和HDRP的设计理念与应用场景。文章还分析了SRP诞生的背景,解释了为何Unity需要引入这一灵活的渲染框架,以满足不同项目的需求。通过对比URP和HDRP,读者可以更好地理解如何选择合适的渲染管线,以优化项目的性能和视觉效果。 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 本文深入探讨了在Android应用开发中常见的相机连接故障问题,特别是在RK3288平台和Android 6.0系统上。通过分析具体案例,本文提供了详细的解决方案和应对策略,旨在帮助开发者有效解决相机连接问题,提升应用的稳定性和用户体验。 ... [详细]
author-avatar
宝宝2502932575
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有