Eclipse 因“无法创建新的本机线程”而崩溃 - 有什么想法吗?(我的设置和信息里面)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6754628/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Eclipse crashes with "Unable to create new native thread" - any ideas? (my settings and info inside)
提问by Folken
I'm having trouble with Eclipse routinely crapping out on me (and being generally sluggish) and I was wondering if anyone could give me any insight. The message that gets thrown is "Unable to create new native thread."at which point I'm prompted to restart Eclipse. This happens 5 or so times a day.
我遇到了 Eclipse 经常对我大喊大叫(而且通常很迟钝)的问题,我想知道是否有人能给我任何见解。抛出的消息是“无法创建新的本机线程”。此时会提示我重新启动 Eclipse。这种情况每天发生 5 次左右。
I'm using Ecliipse Helios Service Release 2 (with Flash Builder plugin) on:
我正在使用 Ecliipse Helios Service Release 2(带有 Flash Builder 插件):
Windows Vista Business
Processor: Intel Core 2 Duo T7500 @ 2.20 GHz
Memory (RAM): 4.00 GB
System Type: 32-bit Operating System
My eclipse.ini settings which were stolen from this thread: What are the best jvm settings for eclipse:
我从这个线程中窃取的 eclipse.ini 设置:What are the best jvm settings for eclipse:
-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
Thanks for any help!
谢谢你的帮助!
edit:
编辑:
@normalocity - the error literally just happened (Unhandled event loop exception), this is after adjusting my eclipse.ini (I changed Xss to 1m, MaxPermSize to 384m, Xms to 512). Here is the additional info you asked for, exception stack trace:
@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.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(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench.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)
回答by Max
It appears that there is not enough memory for new thread stack. On Windows, process space is 2GB. For heap you initially allocate 1Gb (-Xms option), so it's locked from the beginning. Minus 256Mb for classes (PermSize), minus JVM overhead which could be as much as 0.5Gb. So as a result, your threads have only about 256Mb for stacks, which is maximum 64 threads (256/4m).
新线程堆栈似乎没有足够的内存。在 Windows 上,进程空间是2GB。对于堆,您最初分配 1Gb(-Xms 选项),因此它从一开始就被锁定。类 (PermSize) 减去 256Mb,减去可能高达 0.5Gb 的 JVM 开销。因此,您的线程只有大约 256Mb 的堆栈空间,最多为 64 个线程(256/4m)。
Solution: Try to lower stack size to -Xss1024k or reduce initial heap size (-Xms).
解决方案:尝试将堆栈大小降低到 -Xss1024k 或减小初始堆大小 (-Xms)。
Related reading about OutOfMemory: unable to create thread
As a side note, -XX:MaxPermSize=256m looks too small for Eclipse for EE. Better to set to 384.
作为旁注,-XX:MaxPermSize=256m 对于 Eclipse for EE 来说看起来太小了。最好设置为 384。
Cheers, Max
干杯,马克斯
回答by arpadf
I also had trouble with Eclipse Luna on Fedora 20. I've read a lot about different memory options and still couldn't figure out the problem. It drove me crazy.
我在 Fedora 20 上使用 Eclipse Luna 也遇到了问题。我已经阅读了很多关于不同内存选项的内容,但仍然无法找出问题所在。它让我发疯。
Finally I realized that by default, the number of processes a regular user can have on Fedora is very limited. Content of limits.d/90-nproc.conf:
最后我意识到默认情况下,普通用户在 Fedora 上可以拥有的进程数量非常有限。limit.d/90-nproc.conf 的内容:
* soft nproc 1000
Raising this to 5000 fixed my "Unable to create new native thread" problems.
将其提高到 5000 修复了我的“无法创建新的本机线程”问题。