在阅读了最新一期MSDN杂志上的一篇文章后,我想尝试使用VADump来分解我编写的一些应用程序的内存使用情况.
我电脑上唯一的可执行文件副本位于:
c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\winnt\vadump.exe
无论我给VADump提供什么参数组合,它都会返回错误:
OpenProcess Failed c0000034
谷歌搜索出现了一些其他人有同样问题,但这些帖子都没有我能找到的解决方案(甚至回复!).
本机运行的是安装了VS2005和VS2008的WinXP SP2.
VADump看起来是一个非常有用的工具,我真的很想尝试一下.希望这可以在办公室中的另一台PC上运行,但我仍然想让它在我的工作上运行.
有任何想法吗?
我使用的内存分析器模块来获取我的Python代码后的内存使用这个答案。但是,我无法解释%memitmagic的输出(或使用@profile模块中的装饰器的输出或mprof run就此而言)。
例如,
%memit range(10000)
Run Code Online (Sandbox Code Playgroud)
给我 peak memory: 97.41 MiB, increment: 0.24 MiB
尽管,
%memit xrange(10000)
Run Code Online (Sandbox Code Playgroud)
显示peak memory: 97.46 MiB, increment: 0.00 MiB。我确实理解xrange返回一个xrange type和range()返回一个列表之间的区别。我在这里使用它们只是为了演示这两个场景。
我的问题是
peak memory和increment实际上意味着什么呢?我有一个在内部云代工厂空间上运行的 Spring Boot 应用程序。我想监视此 Web 应用程序的堆栈和堆内存,以查找源自代码的 StackOverflow 异常。
分析应用程序的最佳方法是什么。
我正在初始化数百万个以下类型的类
template<class T>
struct node
{
//some functions
private:
T m_data_1;
T m_data_2;
T m_data_3;
node* m_parent_1;
node* m_parent_2;
node* m_child;
}
Run Code Online (Sandbox Code Playgroud)
模板的目的是使用户能够选择float或double精确,其想法是by node<float>将占用更少的内存(RAM).
但是,当我切换double到float我的程序的内存占用时,并没有像我期望的那样减少.我有两个问题,
是否有可能编译器/操作系统保留的空间超过了我的浮动所需的空间(甚至可以将它们存储为双精度).如果是这样,我该如何阻止这种情况发生 - 我在使用g ++的64位机器上使用linux.
有没有一个工具可以让我确定所有不同类使用的内存量?(即某种内存分析) - 确保内存不会被我想到的其他地方搞砸.
我目前正在尝试调试我的Python程序的内存使用情况(在Windows上使用CPython 2.7).但不幸的是,我甚至找不到任何方法来可靠地测量它当前使用的内存量.
我一直在使用任务管理器/资源监视器来测量进程内存,但这似乎只对确定峰值内存消耗有用.通常,即使相关对象被垃圾回收,Python也不会减少提交或工作集.
有没有办法找出Python实际使用了多少内存,或者失败了,以迫使它释放未使用的内存?我不想使用任何需要重新编译插补器的东西.
证明它没有释放未使用的内存的行为示例:
(after some calculations) # 290k
gc.collect() # still 290k
x = range(9999999) # 444k
del x # 405k
gc.collect() # 40k
Run Code Online (Sandbox Code Playgroud) 目前,我尝试使用 memory_profiler 模块来获取使用的内存,如下面的代码:
from memory_profiler import memory_usage
memories=[]
def get_memory(mem,ended):
if ended:
highest_mem=max(mem)
print highest_mem
else:
memories.append(mem)
def f1():
#do something
ended=False
get_memory(memory_usage(),ended)
return #something
def f2():
#do something
ended=False
get_memory(memory_usage(),ended)
return #something
#main
f1()
f2()
ended=True
get_memory(memory_usage(),ended) #code end
>>>#output
# output
# highest memory
Run Code Online (Sandbox Code Playgroud)
但是,它没有成功执行。当end=True 时卡住,发送memory_usage() 的值,结束get_memory 函数。它也没有显示任何错误。,只是等待了很长时间,然后我强制停止执行。任何人都知道更好的方法或解决方案?
python ×3
c++ ×1
java ×1
memory ×1
profiling ×1
python-2.7 ×1
python-3.x ×1
spring-boot ×1
windows ×1