【问题标题】:PyDev under both Aptana and Eclipse very slow on a particular .py fileAptana 和 Eclipse 下的 PyDev 在特定的 .py 文件上非常慢
【发布时间】:2014-02-11 21:04:14
【问题描述】:

这个问题刚刚开始,上周我对特定的源文件没有任何问题。 我正在使用 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 狮子 Java(TM) SE 运行时环境 (build 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

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

【问题讨论】:

    标签: eclipse sqlalchemy pydev


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • Fabio,它确实会产生内存不足错误。似乎问题必须与我的设置有关,但是我不确定是什么。正如我在最初的帖子中所说,这只是在最近几天内开始与此文件一起发生的。我需要使用其他一些文件进行测试,以验证它是否仅使用这个特定的文件/代码块。
      • 检查 -Xmx 标志,我的是当前的 -Xmx512m。
      • 512m 应该没问题...我的猜测是您的代码的某些方面正在使类型推理引擎循环(即:当标记出现、代码分析或代码完成被触发时),但它是如果没有可重现的测试用例,很难追踪它……理想情况下,您可以制作可重现的测试用例并报告错误。如果您愿意,另一个选择是获取 Eclipse SDK、PyDev 源代码 (pydev.org/developers.html) 并在调试器下运行它以查看可能是什么问题:)
      【解决方案3】:

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

      这有点像在黑暗中拍摄,但请逐个尝试以下内容:

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

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

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

      更新

      我刚刚尝试在 Window 7 64 位上的 Eclipse Juno 中重现它,但没有任何问题:

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

      【讨论】:

      • 从 -clean 开关开始并没有什么不同。新的工作区也没有什么不同。在 Console.App 中查看,我没有看到任何看起来像可疑错误的东西。很奇怪,该文件中的任何其他内容都不会触发问题。我注意到当我单击其中一个语句时,CPU 峰值和内存消耗从 ~350Mb 翻倍到 ~700Mb。
      • 有趣。这有点像在黑暗中拍摄,但我记得在启用代码折叠的旧版本 eclipse 中存在性能问题。代码折叠是否适用于 PyDev ?如果是这样,请尝试禁用它,看看是否有帮助?
      • 问题肯定出在代码完成或其中的某个部分。我创建了一个新文件,只复制了该代码块,引入了这些对象的导入,并且可以重现该问题。如果我摆脱进口,就没有问题。确实很奇怪。
      • 正如我们所说,我正在尝试在 Eclipse Juno、Windows 7(64 位)上复制该问题。稍后会报告。
      • scratch那个帖子,不管import有没有,都会出现问题。
      【解决方案4】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-27
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        • 2012-02-14
        • 2012-07-08
        相关资源
        最近更新 更多