我想知道我的Python应用程序的内存使用情况,并且特别想知道哪些代码块/部分或对象占用了大部分内存.Google搜索显示商业广告是Python Memory Validator(仅限Windows).
我没有尝试任何人,所以我想知道哪一个是最好的考虑:
提供大部分细节.
我必须对代码进行最少或不做任何更改.
有没有办法让Python程序确定它当前使用了多少内存?我已经看过有关单个对象的内存使用情况的讨论,但我需要的是进程的总内存使用量,以便我可以确定何时需要开始丢弃缓存数据.
这是来自 man getrusage
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
long ru_maxrss; /* maximum resident set size */
long ru_ixrss; /* integral shared memory size */
long ru_idrss; /* integral unshared data size */
long ru_isrss; /* integral unshared stack size */
long ru_minflt; /* page reclaims */
long ru_majflt; /* page faults */
long ru_nswap; /* swaps */
long ru_inblock; /* block input operations */
long ru_oublock; …Run Code Online (Sandbox Code Playgroud) 这段代码
void print_usage(char * msg)
{
struct rusage usage;
getrusage(RUSAGE_SELF, &usage);
printf("Limits: %s\n", msg);
printf(" %s, %li\n", " maximum resident set size " , usage.ru_maxrss );
printf(" %s, %li\n", " integral shared memory size " , usage.ru_ixrss );
printf(" %s, %li\n", " integral unshared data size " , usage.ru_idrss );
printf(" %s, %li\n", " integral unshared stack size " , usage.ru_isrss );
printf(" %s, %li\n", " page reclaims " , usage.ru_minflt );
printf(" %s, %li\n", " page faults " , …Run Code Online (Sandbox Code Playgroud) 我有一个Python 3.x程序,它处理几个包含大量数据的大型文本文件,这些文件偶尔可以刷掉我的微不足道工作站的内存限制.从一些基本的内存分析来看,似乎在使用生成器时,我的脚本的内存使用量可以保存连续的元素,使用的内存量是我预期的两倍.
我做了一个简单的,独立的例子来测试生成器,我在Python 2.7,3.3和3.4中得到了类似的结果.我的测试代码如下,memory_usage()是一个SO函数的修改版本,在我看的时候使用/proc/self/status和同意top. resource可能是一个更跨平台的方法:
import sys, resource, gc, time
def biggen():
sizes = 1, 1, 10, 1, 1, 10, 10, 1, 1, 10, 10, 20, 1, 1, 20, 20, 1, 1
for size in sizes:
data = [1] * int(size * 1e6)
#time.sleep(1)
yield data
def consumer():
for data in biggen():
rusage = resource.getrusage(resource.RUSAGE_SELF)
peak_mb = rusage.ru_maxrss/1024.0
print('Peak: {0:6.1f} MB, Data Len: {1:6.1f} M'.format(
peak_mb, len(data)/1e6))
#print(memory_usage()) #
data = …Run Code Online (Sandbox Code Playgroud) (C)Python中是否有任何方法可以检查进程的当前内存使用情况?特别是,我想在测试脚本中确定内存使用的高水位标记,但如果有必要,我不介意定期检查内存使用情况并为自己计算高水位线.
编辑:我正在寻找一个纯python解决方案,或在OS X上工作的东西.
我已经看过两年前发布的一些相关问题,但我想知道最近是否有任何解决方案.
我有一本庞大的字典词典.我的记忆中大约有4个词典(每个500 MB大小).当我继续运行程序时,我需要删除这4个字典中的一个并将内存释放到操作系统.因此,我不可能像以前的一些帖子中提到的那样开始一个新的内存分配子进程.
这里有一些代码来说明问题:
import cPickle
import resource
import gc
import time
mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
print "memory usage:", mem
test_dict = {}
for i in range(100000):
test_dict[i] = "AAAAAAAA"
if i%10000 == 0:
mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
print "memory usage:", mem
mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
print "memory usage: (dict created): ", mem
del test_dict
mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
print "mem usage: (dict deleted)", mem
gc.collect()
mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
print "mem usage (garbage collection)", mem
print "sleeping for a few seconds"
time.sleep(30)
gc.collect()
mem …Run Code Online (Sandbox Code Playgroud) python ×6
c ×2
getrusage ×2
linux ×2
memory ×2
linux-kernel ×1
macos ×1
performance ×1
profiling ×1