你将如何找出一个对象使用了多少内存?我知道有可能找出代码块使用了多少,但不是实例化对象(在其生命中的任何时间),这就是我想要的.
我有一个.NET服务,其正常的私有工作集大约为80 MB.在最近的负载测试期间,进程达到3.5 GB内存使用量,导致整个机器的物理内存不足(使用4 GB中的3.9),并且在负载测试停止后很长时间内内存未释放.使用任务管理器,我获取了该进程的转储文件并在Visual Studio 2010 SP1中打开它,我可以开始调试它.
我如何诊断内存问题?我有dotTrace Memory 3.x,它是否支持转储文件的内存分析?如果没有,Visual Studio 2010 Premium的内存分析功能是否有帮助(我目前有专业版)?WinDbg可以帮忙吗?
更新:新的Visual Studio 2013 Ultimate现在可以使用转储文件本机诊断内存问题.有关详细信息,请参阅此博客文章.
.net memory-leaks crash-dumps visual-studio-2010 memory-profiling
可能重复:
什么是一些好的.NET Profilers?
我正在寻找好的.NET CLR内存分析工具.
我的关键要求是它将与IIS和独立的CLR应用程序配合良好.理想情况下,我会看到分配了哪些对象,分配它们的位置以及它们的大小?
有没有人对您推荐的特定工具有任何良好的体验?
在Python 2中有一些工具,但一切似乎都是旧的和过时的.
我发现了PySizer和Heapy但是一切似乎都是面向Python2的,需要付出很多努力来移植.
objgraph很有趣,但仍然不是一个完全工作的分析器
使用哪种工具?
python profiling memory-profiling memory-leak-detector python-3.x
R有一些内存分析工具,比如 Rprofmem(),Rprof()选项"memory.profiling=TRUE"和tracemem().最后一个只能用于对象,因此可以跟踪复制对象的次数,但不提供基于函数的概述.Rprofmem应该能够做到这一点,但即使是最简单的函数调用的输出也会lm()提供超过500行的日志.我试图找出究竟Rprof("somefile.log",memory.profile=T)做了什么,但我不认为我真的明白了.
我能找到的最后一个是托马斯·拉姆利的这个消息,说道,我引述:
我还没有工具来总结输出.
这是在2006年也有一些不错摘要选择现在任何机会,主要是基于Rprofmem(),神秘的输出Rprof()与memory.profile设置为TRUE或任何其他工具?
有人可以解释一下'文档计数'计数器在Chrome开发工具栏的时间轴标签中的含义是什么吗?
在我的应用程序中,我使用iframe并在其中一个页面中的一组页面中导航.目前,"文件计数"计数器显示了一系列值23-32,它代表什么样的?
提前致谢.
如何以编程方式在Google Chrome中获取我的网站的内存使用量(JS和总数)?
我看过使用未记录的HeapProfiler从Chrome扩展程序中执行此操作(请参阅此处),但我无法找到从中获取数据的方法.
我想测量每个版本的内存消耗,所以这需要编程.
编辑:我想出了如何使HeapProfiler方法工作.每个addHeapSnapshotChunk事件都有一个JSON对象的块.
chrome.browserAction.onClicked.addListener(function(tab) {
var heapData,
debugId = {tabId:tab.id};
chrome.debugger.attach(debugId, '1.0', function() {
chrome.debugger.sendCommand(debugId, 'Debugger.enable', {}, function() {
function headerListener(source, name, data) {
if(source.tabId == tab.id && name == 'HeapProfiler.addProfileHeader') {
function chunkListener(source, name, data) {
if(name == 'HeapProfiler.addHeapSnapshotChunk') {
heapData += data.chunk;
} else if(name == 'HeapProfiler.finishHeapSnapshot') {
chrome.debugger.onEvent.removeListener(chunkListener);
chrome.debugger.detach(debugId);
//do something with data
console.log('Collected ' + heapData.length + ' bytes of JSON data');
}
}
chrome.debugger.onEvent.addListener(chunkListener);
chrome.debugger.sendCommand(debugId, 'HeapProfiler.getHeapSnapshot', {uid:data.header.uid, type:data.header.typeId});
} …Run Code Online (Sandbox Code Playgroud) javascript performance google-chrome memory-profiling google-chrome-devtools
对于R Shiny Web应用程序,运行代码分析的哪些好方法可以显示处理时间最长的Shiny代码部分?
我有一个大而肥胖,复杂的Shiny应用程序,而且我想弄清楚在这个迷宫代码的哪个地方,我正在减慢我的Shiny应用程序.我已经试过Rprof和profr,但没有从他们那里得到太多的了解.
我有一个numpy脚本 - 根据top- 使用大约5GB的RAM:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16994 aix 25 0 5813m 5.2g 5.1g S 0.0 22.1 52:19.66 ipython
Run Code Online (Sandbox Code Playgroud)
是否有内存分析器可以让我了解占用大部分内存的对象?
我试过了heapy,但是guppy.hpy().heap()给了我这个:
Partition of a set of 90956 objects. Total size = 12511160 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 42464 47 4853112 39 4853112 39 str
1 22147 24 1928768 15 6781880 54 tuple
2 …Run Code Online (Sandbox Code Playgroud) 我正在学习Go,作为练习,我想实现一个链表.作为参考,我查看了Go官方代码(https://golang.org/src/container/list/list.go).与我相关的一件事是这些线:
108 // remove removes e from its list, decrements l.len, and returns e.
109 func (l *List) remove(e *Element) *Element {
110 e.prev.next = e.next
111 e.next.prev = e.prev
112 e.next = nil // avoid memory leaks
113 e.prev = nil // avoid memory leaks
114 e.list = nil
115 l.len--
116 return e
117 }
Run Code Online (Sandbox Code Playgroud)
我很好奇在这种情况下如何设置指向nil的指针可以防止内存泄漏?如果可能的话,我想构建一个有这个缺陷的程序,并在使用pprof进行分析时看到它(我将使用list.go的修改版本,而不使用这个nil指针设置).
为了清楚回答:如果其中一个节点有一个指向它的外部指针,那么所有相邻的被删除节点将通过该指针进行有效引用,并且不会被删除.

garbage-collection memory-leaks memory-management go memory-profiling
memory-profiling ×10
python ×3
.net ×2
memory-leaks ×2
performance ×2
profiling ×2
r ×2
crash-dumps ×1
go ×1
javascript ×1
memory ×1
numpy ×1
python-3.x ×1
r-faq ×1
shiny ×1