Bug 566338 - "Text Viewer Hover Presenter" thread uses 100% CPU
Summary: "Text Viewer Hover Presenter" thread uses 100% CPU
Status: NEW
Alias: None
Product: JDT
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.16   Edit
Hardware: PC Mac OS X
: P3 major (vote)
Target Milestone: ---   Edit
Assignee: JDT-UI-Inbox CLA
QA Contact:
URL:
Whiteboard: stalebug
Keywords:
Depends on:
Blocks:
 
Reported: 2020-08-24 17:35 EDT by Mirko Raner CLA
Modified: 2022-08-31 12:57 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mirko Raner CLA 2020-08-24 17:35:36 EDT
So, since yesterday, my Eclipse workbench is using 100% CPU and my laptop's fan is  spinning like crazy all the time. I restarted the workbench a couple of times, but it goes into the same mode immediately again.
I ran jstack to see if the thread dump would hold any clues, and, sure enough, among the runnable threads I see the "Text Viewer Hover Presenter" busy all the time:

% while true; do date; jstack 80636 | grep "Text Viewer Hover Presenter" | awk '{print $9}'; sleep 10; done
Mon Aug 24 13:50:59 PDT 2020
cpu=12088550.20ms
Mon Aug 24 13:51:09 PDT 2020
cpu=12098457.79ms
Mon Aug 24 13:51:20 PDT 2020
cpu=12108358.73ms
Mon Aug 24 13:51:30 PDT 2020
cpu=12118262.66ms
Mon Aug 24 13:51:40 PDT 2020
cpu=12128151.94ms
Mon Aug 24 13:51:50 PDT 2020
cpu=12138064.78ms
Mon Aug 24 13:52:00 PDT 2020
cpu=12147974.86ms
Mon Aug 24 13:52:10 PDT 2020
cpu=12157873.54ms
Mon Aug 24 13:52:21 PDT 2020
cpu=12167770.04ms
^C

This particular thread has a couple hundred times more CPU time allocated than the next busiest thread.

I captured a couple characteristic stack traces, but clearly this thread is cranking in some sort of endless loop:


"Text Viewer Hover Presenter" #265 daemon prio=1 os_prio=27 cpu=13025458.60ms elapsed=50310.99s tid=0x00007f87c2998000 nid=0x1c45f runnable  [0x000070000620f000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextToken0(Scanner.java:1543)
	at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextToken(Scanner.java:1451)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12722)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1898)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1870)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:349)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:312)
	at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1071)
	at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:168)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:388)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:381)
	at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getJavaElementsAt(AbstractJavaEditorTextHover.java:124)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:674)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:670)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:130)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:89)
	at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)


"Text Viewer Hover Presenter" #265 daemon prio=1 os_prio=27 cpu=13035347.06ms elapsed=50321.17s tid=0x00007f87c2998000 nid=0x1c45f runnable  [0x000070000620f000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jdt.internal.core.util.Util.getNameWithoutJavaLikeExtension(Util.java:908)
	at org.eclipse.jdt.internal.core.CompilationUnit.getMainTypeName(CompilationUnit.java:840)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.getMainTypeName(CompilationUnitDeclaration.java:446)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.isModuleInfo(CompilationUnitDeclaration.java:459)
	at org.eclipse.jdt.internal.compiler.parser.Parser.isParsingModuleDeclaration(Parser.java:14366)
	at org.eclipse.jdt.internal.compiler.parser.Scanner.isInModuleDeclaration(Scanner.java:3009)
	at org.eclipse.jdt.internal.compiler.parser.Scanner.getVanguardParser(Scanner.java:5166)
	at org.eclipse.jdt.internal.compiler.parser.Scanner.disambiguatedToken(Scanner.java:5470)
	at org.eclipse.jdt.internal.compiler.parser.Scanner.getNextToken(Scanner.java:1461)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12751)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1898)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1870)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:349)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:312)
	at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1071)
	at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:168)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:388)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:381)
	at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getJavaElementsAt(AbstractJavaEditorTextHover.java:124)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:674)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:670)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:130)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:89)
	at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)


"Text Viewer Hover Presenter" #265 daemon prio=1 os_prio=27 cpu=13055105.40ms elapsed=50341.54s tid=0x00007f87c2998000 nid=0x1c45f runnable  [0x000070000620f000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jdt.internal.compiler.parser.Parser.consumeReferenceType1(Parser.java:6536)
	at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:8330)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12781)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1898)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1870)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:349)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:312)
	at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1071)
	at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:168)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:388)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:381)
	at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getJavaElementsAt(AbstractJavaEditorTextHover.java:124)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:674)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:670)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:130)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:89)
	at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)


"Text Viewer Hover Presenter" #265 daemon prio=1 os_prio=27 cpu=13064992.04ms elapsed=50351.73s tid=0x00007f87c2998000 nid=0x1c45f runnable  [0x000070000620f000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.consumeToken(AssistParser.java:1287)
	at org.eclipse.jdt.internal.codeassist.select.SelectionParser.consumeToken(SelectionParser.java:1248)
	at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12743)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1898)
	at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1870)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:349)
	at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:312)
	at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1071)
	at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:168)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:388)
	at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:381)
	at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getJavaElementsAt(AbstractJavaEditorTextHover.java:124)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:674)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:670)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
	at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:130)
	at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:89)
	at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)


Notably, the 100% CPU usage (and the thread's activity) continues even after I closed all editor tabs.

I even went as far as closing all 30+ projects in my workspace, but still the thread keeps cranking, all the while the Progress View states "No operations to display at this time."

After restarting the workbench with all projects closed the problem does not resurface immediately, but eventually comes back once I re-open my projects and go about my development work. So far, I have been unsuccessful in pin-pointing this issue to a particular source file.

The stack traces show both jdt.core and jdt.ui classes, but I filed this under the UI component for, since that is at the root of the stack trace; please re-classify if this turns out to be a JDT core problem. This bug is a major issue in my mind, since it is taxing my laptop to the point where the workbench becomes sluggish and hard to work with.
Comment 1 Roland Grunberg CLA 2020-08-25 12:24:28 EDT
Looks to be stuck in a parse cycle. I haven't looked too thoroughly at the code, but Bug 411359 and Bug 522091 may be related.
Comment 2 Mirko Raner CLA 2020-08-25 16:06:32 EDT
(In reply to Roland Grunberg from comment #1)
> Looks to be stuck in a parse cycle. I haven't looked too thoroughly at the
> code, but Bug 411359 and Bug 522091 may be related.

Thanks, Roland, those two bugs look very similar indeed.
Comment 3 Eclipse Genie CLA 2022-08-31 12:57:00 EDT
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet.

If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.