Aptana和Eclipse下的PyDev对特定的.py文件非常慢

时间:2012-08-01 21:21:13

标签: eclipse sqlalchemy pydev

这个问题刚刚开始,上周我对特定的源文件没有任何问题。 我正在使用SQLAlchemy和Geoalchemy以及触发Eclipse和Aptana的特定代码块,只需编辑文件即可开始ping 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运行时环境(版本1.6.0_31-b04-415-11M3646) Java HotSpot(TM)64位服务器VM(内置20.6-b01-415,混合模式) i7四核,8Gb RAM

我认为这个问题可能是由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 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,但是遇到了一个不同的长查询。我试过禁用自动完成,尝试了-clean的事情,没有运气。

要修复,我等待内存泄漏爆炸并使用jmap.exe转储堆。然后,我运行了Eclipse Memory Analyzer,看看我的内存在哪里,屏幕截图如下。作业中有com.python.pydev.refactoring.markoccurrences.MarkOccurrencesJob的内容,因此我在Preferences-&gt; Pydev-&gt; Editor中禁用了该选项。

自从我做到这一点以来,Eclipse就是速度恶魔并且不再崩溃。有一些街头信誉的人应该将其发布为pydev中的错误。

enter image description here

答案 1 :(得分:0)

在过去,我通过从干净的工作空间开始解决Eclipse疯狂问题取得了一些成功。

这是一个黑暗中的镜头,但请逐一尝试以下内容:

  1. 使用-clean选项和现有工作区启动eclipse。
  2. 如果上述操作无效,请尝试在新工作区中编辑同一文件。
  3. 如果查看Console.app,在编辑文件时,您是否看到过相关的日志消息?

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

    <强>更新

    我刚尝试在Window 7 64位上使用Eclipse Juno重现它,并且没有任何问题:

    enter image description here

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

答案 2 :(得分:0)

对于我来说,这似乎是PyDev类型推理引擎中的一个错误......(可能会循环直到出现内存不足错误)。只是你的代码的子集我在这里无法重现它(即:安装sqlalchemy和geoalchemy,用该文件创建一个项目作为源文件,并且使用该文件确实都能正常工作)。

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

现在,已经说过,它可能只是一些内存峰值可以在以后工作(如果是这样的话,你可以尝试将Eclipse.ini中的-Xmx标志提升到更大的值 - 尽管如果你'在32位java / Eclipse中,该值可能不应高于600m - 700m)。尽管如此,请考虑将此报告为与该用例中使用过多内存相关的错误(但请提供项目作为如何重现该项目的方案)。

答案 3 :(得分:-1)

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

我在Mountain Lion上运行Eclipse 4.2。我尝试升级到4.3甚至尝试了4.3 32位版本。什么都没有用。

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

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

我将SQLAlchemy查询拆分为单独的Python模块,我不喜欢这样做,这解决了问题。在这个例子中,我宁愿Eclipse工作,而不是将我的所有代码都放在一个模块中。