标签: memory-profiling

使用Java获取内存统计信息:Runtime vs. MemoryMXBean

我正在创建一个计划执行程序来读取JVM的内存使用情况.我有两种方法可以在正在运行的JVM中获取内存统计信息 - Runtime和MemoryMXBean,它们的方法之间有以下对应关系:

memoryMxBean.getHeapMemoryUsage().getUsed()      <=> runtime.totalMemory() - runtime.freeMemory()
memoryMxBean.getHeapMemoryUsage().getCommitted() <=> runtime.totalMemory()
memoryMxBean.getHeapMemoryUsage().getMax()       <=> runtime.maxMemory()
Run Code Online (Sandbox Code Playgroud)

除了MemoryMXBean提供的额外非堆内存使用信息之外,有什么理由可以让我更喜欢它而不是运行时,反之亦然?

java memory-profiling

9
推荐指数
1
解决办法
2054
查看次数

Hibernate关联使用太多内存

我有一个表"课",它与表"学生"和"老师"相关联.通过外围关键关系将"班级"与多个学生和教师联系起来.

当我使用hibernate关联并获取大量实体(尝试5000)时,我发现它占用的内存比使用外键占位符的内存多4倍.hibernate关联有什么问题吗?

我可以使用任何内存分析器来找出使用太多内存的内容吗?

这是架构的方式:

class(id,className) 

student(id,studentName,class_id)
teacher(id,teacherName,class_id)

class_id is foreign key..
Run Code Online (Sandbox Code Playgroud)

案例#1 - Hibernate协会

1)在班级实体中,将学生和教师映射为:

@Entity
@Table(name="class")
public class Class {

private Integer id;
private String className;

private Set<Student> students = new HashSet<Student>();
private Set<Teacher> teachers = new HashSet<Teacher>();

@OneToMany(fetch = FetchType.EAGER, mappedBy = "classRef")
@Cascade({ CascadeType.ALL })
@Fetch(FetchMode.SELECT)
@BatchSize(size=500)
public Set<Student> getStudents() {
    return students;
}
Run Code Online (Sandbox Code Playgroud)

2)在学生和老师中,映射类为:

@Entity
@Table(name="student")
public class Student {

private Integer id;
private String studentName;
private Class classRef;

@ManyToOne
@JoinColumn(name = "class_id")
public Class getClassRef() …
Run Code Online (Sandbox Code Playgroud)

java hibernate one-to-many memory-profiling heap-profiling

9
推荐指数
1
解决办法
3237
查看次数

Pympler摘要似乎没有意义

我正在与Pympler进行一些完整性检查,以确保在我尝试分析实际脚本时我理解结果,但我对结果感到有些困惑.以下是我尝试的健全性检查:

SANITY CHECK 1:我启动Python(3)控制台并执行以下操作:

from pympler import summary, muppy
sum = summary.summarize(muppy.get_objects())
summary.print_(sum)
Run Code Online (Sandbox Code Playgroud)

这导致以下总结:

                               types |   # objects |   total size
==================================== | =========== | ============
                         <class 'str |       16047 |      1.71 MB
                        <class 'dict |        2074 |      1.59 MB
                        <class 'type |         678 |    678.27 KB
                        <class 'code |        4789 |    673.68 KB
                         <class 'set |         464 |    211.00 KB
                        <class 'list |        1319 |    147.16 KB
                       <class 'tuple |        1810 |    120.03 KB
                     <class 'weakref |        1269 | …
Run Code Online (Sandbox Code Playgroud)

python memory-leaks memory-profiling python-3.x

9
推荐指数
1
解决办法
494
查看次数

如何在Python中分析多线程程序的内存?

有没有办法在Python中分析多线程程序的内存?

对于CPU分析,我使用cProfile为每个线程创建单独的分析器统计信息,然后将它们组合起来.但是,我找不到使用内存分析器执行此操作的方法.我正在使用heapy.

有没有办法像cProfile一样整合大量的统计数据?或者你会建议哪些内存分析器更适合这项任务.

有人提出了一个相关问题,要求分析多线程程序的CPU使用情况:如何在Python中分析多线程程序?

关于内存分析器的另一个问题是:Python内存分析器

python multithreading profiling memory-profiling

8
推荐指数
1
解决办法
2484
查看次数

内存分析改变了内存使用情况(为了更好)

这实际上是这个问题的后续问题.我设法让分析工作,问题似乎真的是懒惰的评价.

我正在使用的数据结构是a Map Int (Map Int Text),其中Text来自Data.Text.问题是,构建此映射的函数会产生巨大的影响.处理大约3 MB的输入文本时,程序需要超过250 MB的内存.

现在来看这个问题的真正目的:

要获取此数据结构中的字符数,请使用以下函数:

type TextResource = M.Map Int (M.Map Int T.Text)

totalSize :: TextResouce -> Int
totalSize = M.fold ((+) . (M.fold ((+). T.length) 0)) 0
Run Code Online (Sandbox Code Playgroud)

不漂亮,但它完成了工作.我在创建TextResource后立即在main函数中使用此函数.有趣的是,当我使用RTS选项配置程序时,-hr或者-hc内存使用量在一段时间后降至70或50 MB,这将是完全正常的.

不幸的是,这仅在使用性能分析选项和totalSize功能时才有效- 没有它们它会回到250 MB.

我将程序(<70行)与测试文件和cabal文件一起上传,以便您可以自己尝试:链接

test.xml是生成的XML文件,应放入executables目录中.要构建,cabal configure --enable-executable-profiling之后cabal build应该足够了(如果你安装了所需库的分析版本).

您可以在运行程序时看到更改一次,+RTS -hc一次运行没有.

如果有人可以运行这个程序,我真的很棒,因为我真的被困在这里.我已经尝试过deepseq几个地方,但没有任何作用(好吧,除了使用分析选项).

编辑:

然而,分析确实表明只使用了大约20MB的堆,因此在我的评论中,我责怪GHC没有像你想要的那样释放尽可能多的GC托儿所内存.

谢谢,这指出了我正确的方向.事实证明,你可以告诉GHC执行垃圾收集(performGC),在深度调整地图后,它可以很好地工作.虽然我猜不推荐使用performGC,但这似乎是适合这项工作的正确工具.

Edit2: 这是我改变main函数的方法(+ deepseqing返回buildTextFile):

main = do …
Run Code Online (Sandbox Code Playgroud)

haskell memory-profiling

8
推荐指数
1
解决办法
377
查看次数

C#内存不足异常 - 警告策略

在一个复杂的多线程应用程序中,我每周会遇到一次内存不足异常.应用程序通过多个套接字发送/读取大量数据,其中读取数据被缓存以避免网卡缓冲区溢出.
分析内存异常的最佳策略是什么?在正常运行时,应用程序在Process Explorer中显示的大小为"所有堆中的总字节数",最大为1.5 GB.
拥有一个轮询的策略也是一种策略

GC.GetTotalMemory()

要么

PrivateMemorySize64()

一秒钟知道何时开始分析事物?我还没有考虑商业剖析器,我有点担心它们对性能的影响,这可能会给实际问题分析带来错误的结果.

c# out-of-memory memory-profiling

8
推荐指数
1
解决办法
2798
查看次数

ie11内存快照创建因"内存不足"错误而失败

当我们尝试在ie11的内存分析器(Windows 10)中获取内存快照时,我们会遇到内存不足异常.

有没有办法告诉ie开发工具使用更多内存?我们的计算机有比所需更多的内存.

memory-leaks memory-profiling internet-explorer-11

8
推荐指数
1
解决办法
2080
查看次数

Vuex 分析:如何知道内存中的 Vuex 状态或组件大小

有没有办法找到多少尺寸的状态(对象,数组等)或组件的内存占用。

在我当前的上下文中,我需要知道特定状态/组件是否非常重(就内存而言)。

在 chrome 中,我已经尝试过对内存进行快照,但是在这样的大信息中,我找不到如何在结果中识别特定组件或状态:

在此处输入图片说明

memory-management memory-profiling vue.js vuex vue-profiling

8
推荐指数
1
解决办法
666
查看次数

如何使用pympler跟踪/修复tornado-redis中的内存泄漏?

我一直在尝试使用龙卷风Redis的(这基本上是一个叉brükva略作修改与tornado.gen接口而不是adisp工作),以便通过使用提供事件的Redis'发布订阅.

所以我写了一个小脚本来测试这个例子的灵感.

import os

from tornado import ioloop, gen
import tornadoredis


print os.getpid()

def on_message(msg):
    print msg

@gen.engine
def listen():
    c = tornadoredis.Client()
    c.connect()
    yield gen.Task(c.subscribe, 'channel')
    c.listen(on_message)

listen()

ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我PUBLISH通过redis-cli内存使用率不断上升时.

为了描述内存使用情况,我首先尝试使用guppy-pe,但它不能在python 2.7下运行(是的,甚至尝试过后备箱),所以我又回到了pympler.

import os

from pympler import tracker
from tornado import ioloop, gen
import tornadoredis


print os.getpid()

class MessageHandler(object):

    def __init__(self):
        self.memory_tracker = tracker.SummaryTracker()

    def on_message(self, msg):
        self.memory_tracker.print_diff()

@gen.engine
def listen():
    c = …
Run Code Online (Sandbox Code Playgroud)

python tornado memory-profiling redis

7
推荐指数
1
解决办法
1309
查看次数

“Rprof”内存分析输出的解释

我正在尝试使用分析来查看我的代码的哪一部分负责最大使用 3GB 内存(如gc()最大使用内存统计报告所示,请参阅此处如何)。我正在运行这样的内存分析:

Rprof(line.profiling = TRUE, memory.profiling = TRUE)
graf(...) # ... here I run the profiled code
Rprof(NULL)
summaryRprof(lines = "both", memory = "both")
Run Code Online (Sandbox Code Playgroud)

输出如下:

$by.total
                       total.time total.pct mem.total self.time self.pct
"graf"                     299.12     99.69   50814.4      0.02     0.01
#2                         299.12     99.69   50814.4      0.00     0.00
"graf.fit.laplace"         299.06     99.67   50787.2      0.00     0.00
"doTryCatch"               103.42     34.47    4339.2      0.00     0.00
"chol"                     103.42     34.47    4339.2      0.00     0.00
"tryCatch"                 103.42     34.47    4339.2      0.00     0.00
"tryCatchList"             103.42     34.47    4339.2      0.00     0.00
"tryCatchOne"              103.42 …
Run Code Online (Sandbox Code Playgroud)

r memory-profiling

6
推荐指数
1
解决办法
1163
查看次数