这个问题刚刚开始,上周我对特定的源文件没有任何问题。我正在使用 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
从备份还原后仍会出现类似问题。这个问题一定是潜伏的,代码块恰到好处地触发了它。代码完成引擎仍然是主要嫌疑人。