eclipse-jdt / eclipse.jdt.core

Eclipse Public License 2.0
154 stars 122 forks source link

Stuck in a high cpu / infinite gc churn until restarted #1098

Open ben-manes opened 1 year ago

ben-manes commented 1 year ago

Sometimes after running a program through the IDE, I observe constant GC pressure and high CPU usage. This is with the launched program stopped, no building, and an idle system. It has occurred for a while (1-2 years) but rarely, so I never got around to investigating. This is a fairly minimal setup as I generally only use Eclipse for Java Developers with the TestNG plugin installed.

I captured a JFR snapshot (1.jfr.zip), which can be opened in Java Mission Control, JProfiler, or Yourkit. They show that a lot of time is being spent doing AST evaluations, where Parser.comsumeRule and ASTParser.internalCreateAST are hotspots. It may be that an infinite cycle of rules are somehow generated so it never completes. There were also many java.lang.Error exceptions thrown ("SWT Resource was not properly disposed") so maybe that triggers this retry loop. I'm not familiar enough with the code to explain the cause, but I hope that the profile should provide enough context to debug from.

iloveeclipse commented 1 year ago

Could you please :
1) Specify your Eclipse version 2) Attach workspace log ( inside workspace/.metadata/.log)

ben-manes commented 1 year ago

Version: 2023-03 (4.27.0) Build id: 20230309-1520 log.txt

ben-manes commented 1 year ago

The logs show a few different unhandled exceptions that repeat,

NullPointerException ```console !ENTRY org.eclipse.debug.ui 4 0 2023-05-27 09:48:41.525 !MESSAGE Launch shortcut 'org.eclipse.wildwebdeveloper.firefoxRunShortcut' enablement expression caused exception. Shortcut was removed. !STACK 1 org.eclipse.core.runtime.CoreException: Error evaluating Property [org.eclipse.wildwebdeveloper.isHTMLLaunchable, type=class org.eclipse.core.internal.resources.File, tester=org.eclipse.wildwebdeveloper.debug.IsLaunchableHTMLTester@6ef56160] at org.eclipse.core.internal.expressions.Property.test(Property.java:68) at org.eclipse.core.expressions.TestExpression.evaluate(TestExpression.java:107) at org.eclipse.core.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:54) at org.eclipse.core.internal.expressions.AdaptExpression.evaluate(AdaptExpression.java:121) at org.eclipse.core.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:54) at org.eclipse.core.internal.expressions.IterateExpression.evaluate(IterateExpression.java:163) at org.eclipse.core.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:54) at org.eclipse.core.expressions.WithExpression.evaluate(WithExpression.java:84) at org.eclipse.core.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:54) at org.eclipse.core.internal.expressions.EnablementExpression.evaluate(EnablementExpression.java:59) at org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension.evalEnablementExpression(LaunchShortcutExtension.java:280) at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager.getApplicableConfigurationTypes(LaunchConfigurationManager.java:727) at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager.getApplicableLaunchConfigurations(LaunchConfigurationManager.java:765) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.getParticipatingLaunchConfigurations(LaunchingResourceManager.java:507) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.getLabel(LaunchingResourceManager.java:326) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.computeLabels(LaunchingResourceManager.java:246) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager$1$1.run(LaunchingResourceManager.java:144) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.lang.NullPointerException: Cannot invoke "org.eclipse.debug.core.DebugPlugin.getLaunchManager()" because the return value of "org.eclipse.debug.core.DebugPlugin.getDefault()" is null at org.eclipse.wildwebdeveloper.debug.AbstractDebugAdapterLaunchShortcut.(AbstractDebugAdapterLaunchShortcut.java:52) at org.eclipse.wildwebdeveloper.debug.AbstractDebugAdapterLaunchShortcut.(AbstractDebugAdapterLaunchShortcut.java:57) at org.eclipse.wildwebdeveloper.debug.AbstractHTMLDebugAdapterLaunchShortcut.(AbstractHTMLDebugAdapterLaunchShortcut.java:20) at org.eclipse.wildwebdeveloper.debug.firefox.FirefoxRunDebugLaunchShortcut.(FirefoxRunDebugLaunchShortcut.java:20) at org.eclipse.wildwebdeveloper.debug.IsLaunchableHTMLTester.test(IsLaunchableHTMLTester.java:29) at org.eclipse.core.internal.expressions.Property.test(Property.java:65) ... 17 more ```
ConcurrentModificationException ```console !ENTRY org.eclipse.core.jobs 4 2 2023-05-27 09:48:41.524 !MESSAGE An internal error occurred during: "Compute launch button tooltip". !STACK 0 java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013) at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.getShortcutsForSelection(LaunchingResourceManager.java:454) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.pruneShortcuts(LaunchingResourceManager.java:395) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.getLabel(LaunchingResourceManager.java:319) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.computeLabels(LaunchingResourceManager.java:246) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager$1$1.run(LaunchingResourceManager.java:144) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) ```
java.lang.Error ```console !ENTRY org.eclipse.ui.ide 4 4 2023-05-27 09:48:41.506 !MESSAGE Not properly disposed SWT resource !STACK 0 java.lang.Error: SWT Resource was not properly disposed at org.eclipse.swt.graphics.Resource.initNonDisposeTracking(Resource.java:172) at org.eclipse.swt.graphics.Resource.(Resource.java:120) at org.eclipse.swt.graphics.Image.(Image.java:771) at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:241) at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:230) at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55) at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) at org.eclipse.jface.resource.LazyResourceManager.create(LazyResourceManager.java:103) at org.eclipse.jface.resource.LocalResourceManager.allocate(LocalResourceManager.java:72) at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88) at org.eclipse.jface.resource.ResourceManager.createImage(ResourceManager.java:175) at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.getImage(AbstractContributionItem.java:151) at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.updateIcons(AbstractContributionItem.java:177) at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.update(AbstractContributionItem.java:127) at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.fill(AbstractContributionItem.java:264) at org.eclipse.jface.action.MenuManager.doItemFill(MenuManager.java:729) at org.eclipse.jface.action.MenuManager.update(MenuManager.java:806) at org.eclipse.jface.action.MenuManager.update(MenuManager.java:673) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.scheduleManagerUpdate(MenuManagerRenderer.java:1227) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.subscribeUIElementTopicVisible(MenuManagerRenderer.java:213) at jdk.internal.reflect.GeneratedMethodAccessor42.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:183) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:133) at org.eclipse.swt.widgets.Display.syncExec(Display.java:5250) at org.eclipse.e4.ui.workbench.swt.DisplayUISynchronize.syncExec(DisplayUISynchronize.java:34) at org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler.handleEvent(UIEventObjectSupplier.java:64) at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:133) at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) at org.eclipse.e4.ui.model.application.ui.impl.UIElementImpl.setVisible(UIElementImpl.java:361) at org.eclipse.e4.ui.workbench.renderers.swt.ContributionRecord.updateVisibility(ContributionRecord.java:113) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRendererFilter.updateElementVisibility(MenuManagerRendererFilter.java:191) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRendererFilter.updateElementVisibility(MenuManagerRendererFilter.java:202) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerShowProcessor.showMenu(MenuManagerShowProcessor.java:256) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerShowProcessor.menuAboutToHide(MenuManagerShowProcessor.java:114) at org.eclipse.jface.internal.MenuManagerEventHelper.showEventPostHelper(MenuManagerEventHelper.java:95) at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:469) at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:495) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:259) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4646) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1524) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1547) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1528) at org.eclipse.swt.widgets.Menu.menuWillOpen(Menu.java:808) at org.eclipse.swt.widgets.Display.windowProc(Display.java:6424) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSMenu.popUpContextMenu(NSMenu.java:80) at org.eclipse.swt.widgets.Menu._setVisible(Menu.java:270) at org.eclipse.swt.widgets.Display.runPopups(Display.java:4490) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3982) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596) at org.eclipse.equinox.launcher.Main.run(Main.java:1467) ```
Kademlia commented 1 year ago

Edit: Moved similar Issue to https://github.com/eclipse-jdt/eclipse.jdt.core/issues/1100

ben-manes commented 1 year ago

@Kademlia can you move your comment to a new issue?

Screen Shot 2023-05-28 at 7 02 09 PM