1

这个问题刚刚开始,上周我对特定的源文件没有任何问题。我正在使用 SQLAlchemy 和 Geoalchemy 以及在简单地编辑文件时触发 Eclipse 和 Aptana 开始挂钩 cpu 的特定代码块是:

obsRecs = db.session.query(multi_obs)\
.join(sensor,sensor.row_id == multi_obs.sensor_id)\
.join(platform,platform.row_id == sensor.platform_id)\
.join(m_type,m_type.row_id == multi_obs.m_type_id)\
.join(m_scalar_type,m_scalar_type.row_id == m_type.m_scalar_type_id)\
.join(obs_type,obs_type.row_id == m_scalar_type.obs_type_id)\
.join(uom_type,uom_type.row_id == m_scalar_type.uom_type_id)\
.filter(multi_obs.m_date > dateOffset)\
.filter(multi_obs.m_type_id.in_(mTypes))\
.filter(multi_obs.d_top_of_hour == 1)\
.filter(platform.active < 3)\
.filter(platform.the_geom.within(WKTSpatialElement(bboxPoly, -1)))\
.order_by(platform.row_id)\
.all()

一旦我开始编辑该块中的任何内容,就会出现问题。我已经删除了那段代码并编辑了文件中的其他区域,我没有任何问题。我也编辑了其他没有问题的python文件。起初我认为代码完成存在一些问题,所以我将其关闭,但仍然遇到问题。

我使用的是 Eclipse Indigo,如果我没有强制退出应用程序,则会抛出内存不足 Java 错误。在 Aptana 中,cpu 会出现峰值,然后会回到空闲使用状态,如果我再次开始编辑,则会再次出现峰值。

我的设置:OS X Lion Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-11M3646) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode) i7 Quad core, 8Gb 内存

我认为这个问题可能是由 Apple 的最新 Java 更新触发的,所以我通过 Time Machine 将整个机器回滚到更新前状态,但问题仍然存在。

我会很感激任何指示,我正试图找到一个非基于 PyDev 的解决方案。

编辑 允许 Eclipse 运行直到出错,Console.App 确实显示以下内容:

8/1/12 9:14:01.114 PM [0x0-0x182182].org.eclipse.eclipse: Exception in thread "[Timer] - Main Queue Handler" Exception in thread "Poller SunPKCS11-Darwin" 
8/1/12 9:14:01.114 PM [0x0-0x182182].org.eclipse.eclipse: java.lang.OutOfMemoryError: Java heap space
8/1/12 9:14:01.114 PM [0x0-0x182182].org.eclipse.eclipse:   at sun.security.pkcs11.wrapper.PKCS11.C_GetSlotInfo(Native Method)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at sun.security.pkcs11.SunPKCS11.initToken(SunPKCS11.java:767)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at sun.security.pkcs11.SunPKCS11.access$100(SunPKCS11.java:42)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at sun.security.pkcs11.SunPKCS11$TokenPoller.run(SunPKCS11.java:700)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at java.lang.Thread.run(Thread.java:680)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse: java.lang.OutOfMemoryError: Java heap space
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:45)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at java.lang.StringBuffer.<init>(StringBuffer.java:103)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at org.eclipse.equinox.internal.util.impl.tpt.threadpool.ThreadPoolFactoryImpl.execute0(ThreadPoolFactoryImpl.java:94)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at org.eclipse.equinox.internal.util.impl.tpt.timer.TimerImpl.run(TimerImpl.java:110)
8/1/12 9:14:01.115 PM [0x0-0x182182].org.eclipse.eclipse:   at java.lang.Thread.run(Thread.java:680)

编辑 2

抓起Oracle JDK,设置系统使用它。同样的问题。

编辑 3

从备份还原后仍会出现类似问题。这个问题一定是潜伏的,代码块恰到好处地触发了它。代码完成引擎仍然是主要嫌疑人。

4

4 回答 4

3

我遇到了同样的问题,但查询不同,很长。我尝试禁用自动完成,尝试了这个-clean东西,没有运气。

为了修复,我等待内存泄漏爆炸并用于jmap.exe转储堆。然后我运行 Eclipse Memory Analyzer 来查看我的内存去向,截图附在下面。工作中有些事情com.python.pydev.refactoring.markoccurrences.MarkOccurrencesJob,所以我在 Preferences->Pydev->Editor 中禁用了该选项。

自从我这样做以来,Eclipse 就是一个速度恶魔,不再崩溃。有一些街头信誉的人应该将此作为 pydev 的错误发布。

在此处输入图像描述

于 2013-04-12T11:55:42.030 回答
0

对我来说,这看起来像是 PyDev 类型推理引擎中的一个错误......(可能会循环直到发生内存不足错误)。仅使用您的代码子集,我无法在此处重现它(即:安装 sqlalchemy 和 geoalchemy,使用该文件作为源文件创建项目并使用该文件都可以正常工作)。

因此,理想情况下,请创建一个可以复制的项目,并创建一个附加该项目的错误报告(有关在何处创建错误报告的详细信息,请参见:http ://pydev.org/about.html )。另外,请在此处提供堆栈溢出链接作为参考。

现在,话虽如此,它可能只是一些稍后会起作用的内存峰值(如果是这种情况,您可以尝试将 Eclipse.ini 中的 -Xmx 标志提高到更大的值 - 尽管如果您在32 位 java/Eclipse,该值可能不应该高于 600m - 700m)。尽管如此,即使是这种情况,请考虑将其报告为与该用例中使用的内存过多有关的错误(但请提供一个项目作为如何重现该问题的场景)。

于 2012-08-02T11:40:30.057 回答
0

过去,我从一个干净的工作区开始,成功地解决了 Eclipse 的疯狂问题。

这有点像在黑暗中拍摄,但请一一尝试以下方法:

  1. -clean使用该选项和现有工作区启动 eclipse 。
  2. 如果上述方法不起作用,请尝试在新工作区中编辑相同的文件。

如果您查看 Console.app,在编辑文件时,您是否看到任何相关的日志消息?

当您尝试在 Aptana 中编辑文件时,eclipse 中的错误日志视图是否会抛出任何错误消息?

更新

我刚刚尝试在 Window 7 64 Bit 上的 Eclipse Juno 中复制它,但没有任何问题:

在此处输入图像描述

我认为这可能是锻炼的时间,但是您可以升级到 Eclipse Juno 吗?

于 2012-08-01T21:29:40.933 回答
-1

我也再次遇到了这个问题。我遵循了所有关于内存设置、禁用代码完成等的常见建议。

我在 Mountain Lion 上运行 Eclipse 4.2。我尝试升级到 4.3,甚至尝试了 4.3 32 位版本。没有任何工作。

我不经意间注意到一个 Python 模块特别是我的麻烦的原因,这最终导致了我的解决方案。

我还没有说明原因,但问题出在 SQLAlchemy 上。我应该对此进行限定并说问题是一个非常大的 Python 模块,其中包含许多长 SQLAlchemy 查询。

我将 SQLAlchemy 查询拆分为单独的 Python 模块,我不喜欢这样做并且解决了问题。在这种情况下,我宁愿让 Eclipse 工作,也不愿将我的所有代码放在一个模块中。

于 2013-09-25T12:09:14.407 回答