- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在制作一个简单的 Web 应用程序,它使用 flask-sqlalchemy 从 MySQL 数据库中提取(很多?目前在两个表中超过 64000 个字段并且还在增加)数据。我只运行了一个实例,并没有注意到任何问题,直到我用完 RAM 并且事情停止了。我意识到
我可能不得不重新考虑这整个事情是如何工作的,因为我不能继续添加 RAM(它是一个小型虚拟机,所以我从 512 MB 增加到 768 MB,但仍然)......但是 surly Python 应该发布处理请求后的内存?事实上,当在我的 Windows 机器上运行相同的 flask 应用程序时,它会占用 RAM(但只有一半!),当它完成时它就会被释放。在运行许多(据说)微型应用程序的 Debian 机器上并非如此。据我所知,两台机器上运行的 lib 版本是相同的。 Debian 机器甚至拥有比 Windows 机器更高的 Python 版本。他们都连接到同一个数据库。我该如何继续?
from flask import Flask, request, jsonify
from flask.ext.sqlalchemy import SQLAlchemy
import re
from datetime import datetime
app = Flask(__name__)
app.config.from_pyfile('settings.cfg')
db = SQLAlchemy(app)
class Reports(db.Model):
__tablename__ = 'reports'
id = db.Column(db.Integer, primary_key=True)
ip = db.Column(db.Integer)
date = db.Column(db.DateTime)
sid = db.Column(db.Integer)
version = db.Column(db.Integer)
itemname = db.Column(db.String(25))
group = db.Column(db.Integer)
pclass = db.Column(db.String(15))
ltime = db.Column(db.Integer)
rlen = db.Column(db.Integer)
total = db.Column(db.Integer)
def __init__(self, pd):
self.date = datetime.utcnow()
self.sid = pd["sid"]
self.version = pd["version"]
self.itemname = pd["itemname"]
self.group = pd["group"]
self.pclass = pd["pclass"]
self.ltime = pd["ltime"]
self.rlen = pd["rlen"]
self.total = pd["total"]
class Perfdata(db.Model):
__tablename__ = 'perfdata'
reportid = db.Column(db.Integer, db.ForeignKey('reports.id'), primary_key=True)
l70 = db.Column(db.Integer)
l65 = db.Column(db.Integer)
l60 = db.Column(db.Integer)
l55 = db.Column(db.Integer)
l50 = db.Column(db.Integer)
l45 = db.Column(db.Integer)
l40 = db.Column(db.Integer)
l35 = db.Column(db.Integer)
l30 = db.Column(db.Integer)
def __init__(self, reportid, pd):
self.reportid = reportid
self.l70 = pd["l70"]
self.l65 = pd["l65"]
self.l60 = pd["l60"]
self.l55 = pd["l55"]
self.l50 = pd["l50"]
self.l45 = pd["l45"]
self.l40 = pd["l40"]
self.l35 = pd["l35"]
self.l30 = pd["l30"]
def buildlist(self):
plist = []
plist.append(self.l70)
plist.append(self.l65)
plist.append(self.l60)
plist.append(self.l55)
plist.append(self.l50)
plist.append(self.l45)
plist.append(self.l40)
plist.append(self.l35)
plist.append(self.l30)
return plist
@app.route('/ps', methods=['GET'])
def perfget():
response = []
for report, perf in db.session.query(Reports, Perfdata).all():
response.append("")
response.append("%s %s %s %s %s %s %s %s" % (report.version,
report.sid,
report.itemname,
report.group,
report.pclass,
report.ltime,
report.rlen,
report.total))
response.append("%s %s %s %s %s %s %s %s %s" % (perf.l70,
perf.l65,
perf.l60,
perf.l55,
perf.l50,
perf.l45,
perf.l40,
perf.l35,
perf.l30))
return '<br>\n'.join(response)
if __name__ == '__main__':
app.run()
最佳答案
Python 可能不知道何时释放内存,因此您可以帮助它解决问题:
import gc
gc.collect()
关于python - 在 Debian Wheezy 上使用 flask-sqlalchemy 怪异的内存使用和泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458816/
我有一个持续集成服务器构建一些软件,这些软件依赖于比 debian squeeze 中提供的 apt 包更新的 libqt4-dev 版本。该版本在 debian wheezy 中可用。我如何告诉 a
每次我尝试启动 mysql 服务时都会遇到相同的错误 错误消息: 150130 15:56:31 [错误] 无法启动服务器:绑定(bind)到 TCP/IP 端口:无法分配请求的地址150130 15
我主要是一个数据库专家,但我有一个带有 4 个硬盘的 debian wheezy 服务器。不久前它是使用一个磁盘设置的,一个就足够了。现在,我需要更多空间,我认为让我失望的是 UUID 磁盘。 无论如
有没有一种简单的方法可以以 root 身份在 GUI 中启动我的文件管理器?我只想临时创建/更新一些文件,我想通过 GUI 来完成。 我正在使用运行 Wheezy 的 Raspberry Pi。 最佳
我正在尝试构建 the first ogre tutorial 我在 Debian Wheezy - 测试版 4 我已经安装了这些软件包: libois-dev libogre-dev 我已经用这一行
我在嵌入式系统中运行 Debian,并通过串行控制台查看启动情况,但我不知道如何显示启动消息。 我看到 BIOS、grub 菜单,然后: 正在加载 Linux 3.2.0-4-686-pae ...
升级 dist,没问题,虽然丢失了 xbmc,但发现文档说要包含 xbmc 的额外源,因为安装不起作用。 安装的 xbmc 没有意识到它已被完全替换/升级/降级。 不用说我已经丢失了 gnome 并且
由于硬件问题,我想在 this 之后安装一个新内核指导。但我对这一行有点困惑: $ sudo time fakeroot make-kpkg -j4 --initrd kernel_image ker
我正在尝试在 Debian 7.0 Wheeze 上编译 3.8.11 内核。我正在使用 this教程,但在最后一步有一个奇怪的问题: sudo dpkg -i linux-headers-3.8.1
出于教育目的,我想在 Debian Wheezy 中实现一个系统调用。我希望在 linux-image-3.2.0--rt-amd64 包中的内核上实现它。以下是我尝试过的概述: 获取内核源代码: a
最近我所有的 docker 容器 FROM debian:wheezy 都无法再构建了。 我尝试启动以下命令,但即使这样也没用。 ~ docker run -it --rm debian:wheezy
我正在 debian Wheezy 中安装库 libapache-mime4j-java。但是,这取决于默认的 JRE,即 Java 1.6,因此默认安装 Java 1.6。在使用 安装依赖于它的包时
我尝试在使用 debian 7.4 的服务器上安装 pypy。我尝试了几种不同的方法,但都失败了。当我将 jessie main 添加到 sources.list 时,我可以安装 pypy 和 pyp
我有一个运行 Web 服务器的 Debian Wheezy 服务器。我的网站根目录下有一个名为 data 的文件夹,其中包含几个不经常更新的 json 文件。 上传和显示我的文件不是问题。但是,如果文
这个问题在这里已经有了答案: How to upgrade glibc on Debian? (4 个答案) 关闭 7 年前。 当我尝试在 BeagleBone 上运行我的应用程序时,出现以下错误:
在旧版本的 Debian 中,我可以单击文件夹浏览器中地址栏左侧的按钮,然后从设计不佳的按钮切换到能够输入地址,例如 /etc/blah/blah/blah 在 Debian Wheezy 7 中,我
在教程中,我看到人们谈论添加 source.list 来获取最新的 nginx 版本。我找到了这个适用于 Debian 6 的: deb http://nginx.org/packages/debia
叹息 几天来我一直在努力解决这个问题,但还没有找到任何解决方案。我什至重新安装了我的 VPS。也没有帮助。我已经安装了 Apache2 和 PHP5 apt-get install php5 liba
我正在尝试在我的 debian Raspberry Pi 中安装 JDK 1.8.0。我下载了 tar ball 并将文件解压缩到 /opt/java 中。然后我将路径包含在 /etc/profile
在 Debian Wheezy 上启动 Brackets Sprint 40 会抛出以下错误消息。 ./brackets: /lib/x86_64-linux-gnu/libc.so.6: versi
我是一名优秀的程序员,十分优秀!