`

Django"内存泄漏"的问题

 
阅读更多

转自:http://www.igigo.net/archives/66

 

Django"内存泄漏"的问题

 

这几天一直在忙着赶项目,一个基于django的日志分析系统,之前已经有基本的雏形,这一次主要是给它做代码的整理及重构部分模块.为了保持代码的一致性,除了Web部分用了django,后台程序与数据库的交互也采用了django的框架. 我在后台python脚本模块中,直接import了django的models

1
2
3
4
5
6
import sys
from django.core.management import setup_environ
sys.path.append('/test/web_site/')
import settings
setup_environ(settings)
from mysql.models import *

通过这样,后台其他程序就可以直接通过django与数据库打交道,处理日志的守护进程也是这么做的,但随着运行时间的加长,我发现进程所占用的内存越来越大. 内存泄漏~! 我的程序逻辑并不复杂,唯一有内存泄漏的可能也就是不断重复执行的一个循环,几行代码,但我看了好久也没发现有问题的地方. 而且python的内存管理机制相当自动化,极少有出现内存无法释放的问题,常见的range(n)和交叉引用导致的内存不回收的情况,代码中并没有采用. 这让我十分疑惑

只能硬着头皮调试,几行代码,我就没用啥高级的调试方法,直接一行行的注释掉来观察,最后发现是django的数据库API导致的.如

1
2
3
from mysql.models import test_log as logtable
p=logtable(times=valuedic['times'],ipadd=valuedic['ipadd'])
p.save()

在p.save(),把数据插入数据库后,这一部分的内存就不会释放了,加上del p 或者p = None都无济于事. 搜来搜去也没发现其他人有遇到类似的问题,幸福的是最后我还是在一篇e文中找到了点线索

原文地址:http://blog.webfaction.com/tips-to-keep-your-django-mod-python-memory-usage-down

文中第一条就提到:Make sure that you set DEBUG to False in settings.py,在DEBUG模式下,所有的SQL查询都会被保存在内存中.
我顿时想起,由于我整个项目还在调试阶段,这个DEBUG变量是设置为True的

DEBUG设置为False后,内存泄漏的问题就不复存在了

可我整个项目还需要调试,不能就这么简单的关闭DEBUG模式,怎么办? 我一开始想在后台模块import settings后再重新设置DEBUG变量

1
2
3
4
5
6
7
import sys
from django.core.management import setup_environ
sys.path.append('/test/web_site/')
import settings
settings.DEBUG = False
setup_environ(settings)
from mysql.models import *

可经过测试,这样做并无法生效,怎么回事? 原来setup_environ时把整个模块都传过去了,这样的方法行不通.

最后我用了折衷的方法, copy一份settings,等项目完工后,再把原settings的DEBUG关闭就可以了

1
2
3
4
5
6
import sys
from django.core.management import setup_environ
sys.path.append('/test/web_site/')
import settings_for_db as settings
setup_environ(settings)
from mysql.models import *

之所以标题用引号,因为这只是一个DEBUG模式下django的特性,不是真正的内存泄漏.

分享到:
评论

相关推荐

    记一次django内存异常排查及解决方法

    遇到类似问题时,应首先关注高频接口和复杂查询,通过调整代码逻辑和优化查询方式来防止内存泄漏。同时,使用如`tracemalloc`等工具可以帮助追踪内存使用情况,定位问题根源。在日常开发中,培养良好的编程习惯和...

    django-web-profiler-master.rar

    4. 内存消耗:了解Web应用的内存使用情况有助于防止内存泄漏和提升服务器资源利用效率。Django Web Profiler可以帮助开发者跟踪内存分配和释放,识别可能导致内存问题的代码段。 5. 源码分析:Django Web Profiler...

    Python库 | django-processinfo-1.0.0.tar.gz

    2. **内存占用**:显示每个进程的内存使用情况,帮助开发者了解是否存在内存泄漏等问题。 3. **CPU使用率**:监控CPU资源,找出占用过高CPU的进程,有助于定位性能问题。 4. **日志分析**:可能集成日志查看功能,...

    Python库 | django_command_monitor-0.1.4-py3-none-any.whl

    2. **监控内存使用**:观察命令运行过程中的内存占用,防止内存泄漏或过度使用。 3. **日志输出增强**:提供更详细的日志信息,便于调试和问题排查。 4. **自定义监控**:通过扩展和定制,可以监控其他自定义指标,...

    django-cacheops-6.1.tar.gz

    3. **安全考虑**:注意缓存敏感数据可能带来的隐私泄露问题,适时清理过期或不再需要的缓存。 总结来说,Django Cacheops是Django开发中的得力助手,它通过智能缓存策略,极大地提升了Web应用的性能。合理使用和...

    Python-保持Django应用性能的详细记录

    性能记录能够帮助我们发现潜在的瓶颈,如数据库查询效率低、模板渲染时间过长或内存泄漏等问题。通过持续跟踪这些指标,我们可以及时采取措施,优化性能,避免因负载增加而导致的服务崩溃。 要开始记录Django应用的...

    开源项目-meehow-go-django-hashers.zip

    【开源项目-meehow-go-django-hashers】是一个专注于Django框架密码哈希算法的开源项目,它将Python的Django Hashers移植到了Go语言中。这个项目的主要目的是为Go开发者提供与Django相似的密码处理功能,以便于在Go...

    easybuggy4django:在Django上构建的EasyBuggy克隆

    是一个损坏的Web应用程序,旨在了解错误和漏洞的行为,例如,内存泄漏,死锁,无限循环,SQL注入等。快速开始$ git clone https://github.com/k-tamura/easybuggy4django.git$ cd easybuggy4django/$ pip install -...

    基于Django2.2+MySQL+spark的在线电影推荐系统设计与实现.zip

    3. 性能优化:合理设置Spark的配置参数,如分区数、内存分配等,以提高计算效率。 4. 安全性考虑:确保用户数据的安全,遵循相关隐私政策,避免数据泄露。 总的来说,本项目结合了Web开发、数据库管理和大数据分析...

    python基于Django的lsb算法与rsa算法信息隐藏算法源码数据库论文.doc

    这无疑极大地方便了人们的日常生活,但同时也加剧了信息泄露的风险。网络不仅承载着日常生活资讯的传递,还涉及到国家政治、军事及经济等敏感信息的交流。然而,开放的网络环境为不法分子和黑客提供了可乘之机,他们...

    ServerSyc.rar

    这可能涉及到C++或类似语言中的内存泄漏,或者是在Java等垃圾回收语言中,由于某种原因导致的对象无法被正常清理。内存泄漏可能导致系统资源耗尽,影响程序的稳定性和性能。解决这个问题通常需要仔细检查程序中的...

    对用户操作进行纪录,并写入日志

    5. **资源管理**:正确地关闭和释放使用的资源,避免内存泄漏。 #### 核心方法解析 1. **构造函数与初始化**: `LogWriter` 类的构造函数中,调用了 `outInit()` 方法,用于初始化输出流,确保日志可以被正确地写入...

    Django中使用Celery的方法示例

    - **Max Tasks Per Child**:每个worker执行了多少任务就会销毁,以防止内存泄漏。例如:`CELERYD_MAX_TASKS_PER_CHILD=40` - **Queue Configuration**:设置详细的队列配置。例如: ```python CELERY_QUEUES = { ...

    Python库 | MonkeyScope-1.3.4.tar.gz

    MonkeyScope 是一个强大的 Python 库,专为性能分析和内存泄漏检测而设计。这个1.3.4版本的 tar.gz 文件包含源代码和其他相关资源,使得开发者能够在自己的项目中集成 MonkeyScope,以便对代码的运行时行为进行深入...

    Python库 | viztracer-0.14.4-cp39-cp39-win_amd64.whl

    3. **内存分析**:viztracer可以监控对象的生命周期,显示内存分配和释放的情况,对于查找潜在的内存泄漏问题非常有用。 4. **自定义事件和指标**:开发者可以自定义事件和指标,以便在特定时刻记录额外的数据,以...

    aspose实现在线预览word,ppt,excel,pdf文件架包(2)

    在实现在线预览时,必须注意文件安全问题,避免敏感信息泄露。例如,对上传的文件进行病毒扫描,限制可预览的文件类型和大小,以及确保转换过程不会暴露原始文件内容。 9. **错误处理和兼容性**: 开发过程中要...

    购物车示例 session

    此外,`session`管理还需要考虑一些最佳实践,如设置适当的`session`过期时间,避免内存泄漏。过期时间太短会导致用户频繁登录,而过长则可能占用过多服务器资源。我们还可以利用会话复制或会话持久化策略来应对高...

    python-弱引用(csdn)————程序.pdf

    这种机制主要用于解决Python中的循环引用问题,因为常规的引用计数无法检测到这类情况,可能导致内存泄漏。 在Python中,垃圾回收机制包括引用计数、标记清理和分代回收等策略。引用计数是最基本的方法,它跟踪每个...

    Python相比Java的优缺点共1页.pdf.zip

    另一方面,Java的内存管理相对复杂,程序员需要手动进行内存分配和释放,这可能导致内存泄漏等问题。相比之下,Python采用垃圾回收机制,程序员无需关心内存管理,降低了开发难度,但也可能带来一定的性能损失。 在...

    billiard-3.3.0.23

    1. **进程池管理**:该版本的billiard改进了进程池的初始化和销毁过程,确保了资源的有效利用和释放,减少了潜在的内存泄漏问题。 2. **信号处理**:增强了对SIGTERM和SIGINT等信号的响应,使得在接收到这些信号时...

Global site tag (gtag.js) - Google Analytics