Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript内存泄漏故障排除_Javascript_Memory Leaks - Fatal编程技术网

Javascript内存泄漏故障排除

Javascript内存泄漏故障排除,javascript,memory-leaks,Javascript,Memory Leaks,我正在开发一个非常简单的web应用程序,它可以显示点击网页的顶级用户。我在d3中编写了一些代码,将数据转换为条形图,并编写了一个简单的php脚本,从数据库中提取数据。我使用ajax请求每5秒提取一次数据并更新条形图。毫无疑问,如果我在后台打开页面,它将到达旧的点 aw snap google chrome has run out of memory 我已经浏览了很多关于内存泄漏的网站,并尽了我所能来防止它们,但我很有可能把事情搞砸了。问题不在于此页面上出现的错误(我已经编写了大量javascr

我正在开发一个非常简单的web应用程序,它可以显示点击网页的顶级用户。我在d3中编写了一些代码,将数据转换为条形图,并编写了一个简单的php脚本,从数据库中提取数据。我使用ajax请求每5秒提取一次数据并更新条形图。毫无疑问,如果我在后台打开页面,它将到达旧的点

aw snap google chrome has run out of memory
我已经浏览了很多关于内存泄漏的网站,并尽了我所能来防止它们,但我很有可能把事情搞砸了。问题不在于此页面上出现的错误(我已经编写了大量javascript应用程序,但没有出现这种情况),绝对没有证据表明泄漏正在发生。我每5秒检索一次的数据是212kb,当我进行堆记录时,堆内存峰值为25mb,并没有真正增加(它通常在10到25mb之间反弹),因此似乎212kb正在被垃圾收集,并且没有在堆中累积。同样地,我也观察了任务管理器,当我打开唯一的选项卡时,似乎有很大的波动,但肯定没有上升的趋势。我拍摄了堆快照,它们通常在10-15mb范围内,我真的不知道如何读取快照,但下面是运行15分钟左右后的情况:

这让我非常沮丧,我花了20-30个小时在这个问题上,但这似乎是一个守望相助的例子。如果我寻找它发生的证据,我永远找不到任何证据,但是如果我在离开电脑几个小时的时候打开它,页面肯定会崩溃。这几乎就像垃圾收集器在决定停止运行之前,只是等待我离开我的计算机


有没有关于什么可能是罪魁祸首的想法,或者下一步尝试确定罪魁祸首的步骤?这是我第一次经历内存泄漏,这让我抓狂。谢谢。

您的代码第37行看起来很可疑,这意味着发布我的代码真的会有帮助吗?这更像是一个关于内存泄漏的一般性问题,以及堆外的内存泄漏是否是一件事,或者我是否错过了看到它发生的方法。我不希望stackoverflow能为我梳理一大堆代码并解决我的内存泄漏问题。我当时太轻率了。。。但是一个快照是没有意义的。。。两张快照可能更有用:哦,还有一件事。。。您尝试过其他浏览器吗?也许这是一个普通的chrome问题,在这种情况下,你已经浪费了20-30个小时调试一个浏览器问题!!只是一个猜测,但这听起来像是在ajax调用的每次迭代中为数据分配新的变量,而从不销毁/重新使用现有变量。这可能需要相当长的时间来实现,但我将首先在堆栈中查找对象数量不断增长的类型。是第二个快照,它是12.3mbline 37,你的代码看起来很可疑,这意味着发布我的代码会有帮助吗?这更像是一个关于内存泄漏的一般性问题,以及堆外的内存泄漏是否是一件事,或者我是否错过了看到它发生的方法。我不希望stackoverflow能为我梳理一大堆代码并解决我的内存泄漏问题。我当时太轻率了。。。但是一个快照是没有意义的。。。两张快照可能更有用:哦,还有一件事。。。您尝试过其他浏览器吗?也许这是一个普通的chrome问题,在这种情况下,你已经浪费了20-30个小时调试一个浏览器问题!!只是一个猜测,但这听起来像是在ajax调用的每次迭代中为数据分配新的变量,而从不销毁/重新使用现有变量。这可能需要相当长的时间来实现,但我将首先在堆栈中查找对象数量不断增长的类型。是第二个快照,它是12.3mb