Eclipse崩溃并显示“无法创建新的本机线程”- 有什么想法吗?(我的设置和信息在内部)

15

我在使用 Eclipse 时,经常会出现软件崩溃(反应迟缓),我想知道有没有人能给我一些见解。抛出的错误信息是"Unable to create new native thread."然后提示我重新启动 Eclipse。这种情况每天发生5次左右。

我正在使用带有 Flash Builder 插件的 Eclipse Helios Service Release 2 版本:

Windows Vista Business
Processor: Intel Core 2 Duo T7500 @ 2.20 GHz
Memory (RAM): 4.00 GB
System Type: 32-bit Operating System

我从这个帖子中偷来的eclipse.ini设置:

-startup
plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
-vm
C:/jdk1.6.0_25/jre/bin/client/jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Declipse.p2.unsignedPolicy=allow
-Xmn256m
-Xms1024m
-Xmx1024m
-Xss4m
-XX:PermSize=256m
-XX:MaxPermSize=256m
-XX:CompileThreshold=5
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+CMSIncrementalPacing
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods
-Dcom.sun.management.jmxremote

感谢任何帮助!

编辑:

@normalocity - 错误刚刚发生(未处理的事件循环异常),这是在我调整了我的eclipse.ini文件之后发生的(我将Xss更改为1m,MaxPermSize更改为384m,Xms更改为512)。以下是您所要求的其他信息,异常堆栈跟踪:

java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:640)
at org.eclipse.jface.text.contentassist.ContentAssistant$AutoAssistListener.start(ContentAssistant.java:263)
at org.eclipse.jface.text.contentassist.ContentAssistant$AutoAssistListener.keyPressed(ContentAssistant.java:345)
at com.adobe.flexide.editorcore.contentassist.FlexContentAssistant$FlexAutoAssistListener.keyPressed(FlexContentAssistant.java:47)
at org.eclipse.jface.text.contentassist.ContentAssistant$InternalListener.verifyKey(ContentAssistant.java:811)
at org.eclipse.jface.text.TextViewer$VerifyKeyListenersManager.verifyKey(TextViewer.java:489)
at org.eclipse.swt.custom.StyledTextListener.handleEvent(StyledTextListener.java:65)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:774)
at org.eclipse.swt.custom.StyledText.handleKeyDown(StyledText.java:5957)
at org.eclipse.swt.custom.StyledText$7.handleEvent(StyledText.java:5656)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1103)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1099)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1508)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4270)
at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4162)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2459)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3655)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
at org.eclipse.equinox.launcher.Main.run(Main.java:1408)

(1) 是否有更详细的错误信息版本?如果有,请发布它。 (2) 你说它每天发生几次。它发生时相关事件是什么(例如,当Eclipse尝试显示代码完成时,当你点击“保存”时,当你关闭窗口时等)? - jefflunt
1
我在工作中遇到了完全相同的问题。这个问题出现在我们从32位Windows Server 2003迁移到64位Windows 7/2008时。我们使用自制的Eclipse插件,需要大量内存,因此Eclipse运行时使用了-Xmx1380m。在64位Windows上,它开始崩溃,并显示“OutOfMemoryError:无法创建新的本机线程”和“SWTError:没有更多的句柄”。调整-Xss并没有帮助。减少-Xmx(如一些博客建议的那样)也不是一个选项。最终通过升级到64位Eclipse并将-Xmx增加到2或3GB来解决了这个问题。 - Eli Acherkan
尝试完全删除-Xss选项。 - Max
2个回答

16

看起来新线程堆栈的内存不足。在Windows上,进程空间为2GB。对于堆,您最初分配了1Gb(-Xms选项),因此从一开始就被锁定。减去256Mb用于类(PermSize),再减去JVM开销,这可能高达0.5Gb。因此,结果是,您的线程仅具有约256Mb的堆栈,最多只能有64个线程(256/4m)。

解决方案:尝试将堆栈大小降低到-Xss1024k或减少初始堆大小(-Xms)

相关阅读:Out Of Memory:无法创建线程

顺祝好运, Max


@max 怎样降低我的堆栈大小 Xss ?? - smruti ranjan

0

我在Fedora 20上使用Eclipse Luna时也遇到了麻烦。我阅读了很多关于不同内存选项的文章,但仍然无法解决问题。这让我感到非常疯狂。

最后我意识到,默认情况下,在Fedora上普通用户可以拥有的进程数量非常有限。限制文件limits.d/90-nproc.conf的内容如下:

*          soft    nproc     1000

将其提高到5000可以解决我的“无法创建新本地线程”问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接