2012-07-23 72 views
0

我正在构建一个大型导入脚本,该脚本使用来自独立代码库的功能,我怀疑有内存泄漏。它针对相同的操作调用了多达10000次的代码库,而第一个脚本相对较快(2秒),该脚本需要很长时间才能运行(超过100小时并计数),最后同样的任务已启动到60秒或更多(并且仍然在攀升)。发现并修复泄漏时,解决此问题的最佳方法是什么?在Java中解决内存泄漏的方法

已集思广益一些解决方案将是:

创建运行该脚本的一部分,那么结束它,开垦使用的资源的过程。

使用shell脚本启动程序多次的子集的任务,每次完成,并有更新的数据输出到文件将由下一次迭代

编辑使用:改变了问题被解释为明确表示进口和代码库是单独的程序

+2

雇用其他人来查找并修复泄漏。为机器添加大量内存。 – 2012-07-23 10:52:38

+0

内存解决方案已经尝试过,它不会再产生内存不足,但脚本运行需要很长的时间,看起来可能需要一周以上的时间。 – FooBar 2012-07-23 10:56:57

+0

如果可以分割导入,我会这样做。它快速简单。但是您必须确保导入的每一行都是独立的,并且不需要引用较早的导入行。 – moeTi 2012-07-23 10:56:58

回答

0

我通过最小化包含对其他代码库的引用的范围来解决此问题。基本上每次我初始化一个对象或从另一个代码库调用某个函数时,我都会经历一些挫折,以确保它在最短的时间内存在。通常再次将引用设置为NULL以确保删除所有引用。

这样做的结果很好,将时间从150小时缩短到30天以下。

2

你知道,你所提供的证据都没有明确指出存储泄漏。真正的问题可能是完全不同的东西,比如设计不佳的算法,或者数据库表或查询调整不当。

假设这是一次存储泄漏,应用“创可贴”解决方案可能会浪费时间,或者实际上使问题变得更糟。

你最好花时间预先确定真正的问题是什么并解决它,而不是尝试一系列的解决方法......这可能会变成徒劳。

+0

是的,这很有道理,我同意,虽然没有选择,但我的任务是找到一种方法使其工作。该脚本将只运行一次,因此我无法遵循您的出色建议,这就是为什么我需要寻求解决方法的帮助。 – FooBar 2012-07-23 11:33:56

+0

@FooBar - 祝你好运。我怀疑我们能够提出任何有很多工作机会的解决方法。 – 2012-07-23 11:35:33