eclipse-jdt / eclipse.jdt.core

Eclipse Public License 2.0
158 stars 126 forks source link

An internal error occurred during: "Java Search" #1154

Closed laeubi closed 1 year ago

laeubi commented 1 year ago

I encountered this when trying to perform a search for a reference on

https://github.com/eclipse-equinox/p2/blob/98e45d63f909561b8d85c21a533fe3e51bfc70a5/bundles/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/Activator.java#L55

in the Eclipse-SDK-IDE workspace: https://github.com/eclipse-platform/.github/blob/main/CONTRIBUTING.md#create-an-eclipse-development-environment

eclipse.buildId=4.29.0.I20230615-1800
java.version=17.0.2
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Command-line arguments:  -os linux -ws gtk -arch x86_64

org.eclipse.core.jobs
Error
Sat Jun 17 07:53:09 CEST 2023
An internal error occurred during: "Java Search".

java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.internal.compiler.util.JrtFileSystem.walkModuleImage(org.eclipse.jdt.internal.compiler.util.JRTUtil$JrtFileVisitor, int)" because the return value of "org.eclipse.jdt.internal.compiler.util.JRTUtil.getJrtSystem(java.io.File, String)" is null
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:241)
    at org.eclipse.jdt.internal.core.JavaProject.loadModulesInJimage(JavaProject.java:983)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:782)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:1103)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:1048)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:1025)
    at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:538)
    at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:266)
    at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:597)
    at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:328)
    at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:314)
    at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:269)
    at org.eclipse.jdt.internal.core.JavaProject.getPackageFragmentRoots(JavaProject.java:2384)
    at org.eclipse.jdt.internal.core.util.HandleFactory.getPkgFragmentRoot(HandleFactory.java:394)
    at org.eclipse.jdt.internal.core.util.HandleFactory.createOpenable(HandleFactory.java:138)
    at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1498)
    at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:135)
    at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:251)
    at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:602)
    at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:670)
    at org.eclipse.jdt.internal.ui.search.JavaSearchQuery.run(JavaSearchQuery.java:178)
    at org.eclipse.search2.internal.ui.InternalSearchUI$InternalSearchJob.run(InternalSearchUI.java:94)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
laeubi commented 1 year ago

I now started Eclipse with console enabled and found the following exception reported:

Error: failed to create JrtFileSystem from /usr/lib/jvm/java-9-openjdk-amd64/lib/jrt-fs.jar
java.io.FileNotFoundException: /usr/lib/jvm/java-9-openjdk-amd64/release (Datei oder Verzeichnis nicht gefunden)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.io.FileReader.<init>(FileReader.java:75)
    at org.eclipse.jdt.internal.compiler.util.Jdk.readJdkReleaseFile(JRTUtil.java:460)
    at org.eclipse.jdt.internal.compiler.util.Jdk.lambda$0(JRTUtil.java:413)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
    at org.eclipse.jdt.internal.compiler.util.Jdk.<init>(JRTUtil.java:411)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.getJrtSystem(JRTUtil.java:134)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:241)
    at org.eclipse.jdt.internal.core.search.indexing.AddJrtToIndex.execute(AddJrtToIndex.java:267)
    at org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:514)
    at java.base/java.lang.Thread.run(Thread.java:833)

Also there is

!ENTRY org.eclipse.jdt.core 4 4 2023-06-19 07:05:45.342
!MESSAGE Background Indexer Crash Recovery
!STACK 0
java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.internal.compiler.util.JrtFileSystem.walkModuleImage(org.eclipse.jdt.internal.compiler.util.JRTUtil$JrtFileVisitor, int)" because the return value of "org.eclipse.jdt.internal.compiler.util.JRTUtil.getJrtSystem(java.io.File, String)" is null
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:241)
    at org.eclipse.jdt.internal.core.search.indexing.AddJrtToIndex.execute(AddJrtToIndex.java:267)
    at org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:514)
    at java.base/java.lang.Thread.run(Thread.java:833)
Exception in thread "Java indexing" java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.internal.compiler.util.JrtFileSystem.walkModuleImage(org.eclipse.jdt.internal.compiler.util.JRTUtil$JrtFileVisitor, int)" because the return value of "org.eclipse.jdt.internal.compiler.util.JRTUtil.getJrtSystem(java.io.File, String)" is null
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:241)
    at org.eclipse.jdt.internal.core.search.indexing.AddJrtToIndex.execute(AddJrtToIndex.java:267)
    at org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:514)
    at java.base/java.lang.Thread.run(Thread.java:833)
iloveeclipse commented 1 year ago

@laeubi : could you please try new nightly build and check what is working / not working now, plus check error log?

laeubi commented 1 year ago

I'm currently updated to Eclipse Java Development Tools 3.19.200.v20230620-1800 and performed some searches without a problem.

The error log now contains a usefull message:

eclipse.buildId=4.29.0.I20230620-1800
java.version=17.0.2
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Command-line arguments:  -data file:/opt/eclipse/platform-sdk/ws/ -os linux -ws gtk -arch x86_64

org.eclipse.jdt.core
Error
Wed Jun 21 09:14:14 CEST 2023
Error reading modules from /usr/lib/jvm/java-9-openjdk-amd64/lib/jrt-fs.jar

java.io.FileNotFoundException: /usr/lib/jvm/java-9-openjdk-amd64/release (Datei oder Verzeichnis nicht gefunden)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.io.FileReader.<init>(FileReader.java:75)
    at org.eclipse.jdt.internal.compiler.util.Jdk.readJdkReleaseFile(JRTUtil.java:495)
    at org.eclipse.jdt.internal.compiler.util.Jdk.lambda$0(JRTUtil.java:448)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
    at org.eclipse.jdt.internal.compiler.util.Jdk.<init>(JRTUtil.java:446)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.getJrtSystem(JRTUtil.java:145)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:240)
    at org.eclipse.jdt.internal.core.JavaProject.loadModulesInJimage(JavaProject.java:983)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:782)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:1103)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:1048)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:1025)
    at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:538)
    at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:266)
    at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:597)
    at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:328)
    at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:314)
    at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:269)
    at org.eclipse.jdt.internal.core.JavaProject.getPackageFragmentRoots(JavaProject.java:2384)
    at org.eclipse.jdt.internal.core.util.HandleFactory.getPkgFragmentRoot(HandleFactory.java:394)
    at org.eclipse.jdt.internal.core.util.HandleFactory.createOpenable(HandleFactory.java:138)
    at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1498)
    at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:135)
    at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:251)
    at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:602)
    at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:670)
    at org.eclipse.jdt.internal.ui.search.JavaSearchQuery.run(JavaSearchQuery.java:178)
    at org.eclipse.search2.internal.ui.InternalSearchUI$InternalSearchJob.run(InternalSearchUI.java:94)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

and also

eclipse.buildId=4.29.0.I20230620-1800
java.version=17.0.2
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Command-line arguments:  -data file:/opt/eclipse/platform-sdk/ws/ -os linux -ws gtk -arch x86_64

org.eclipse.jdt.core
Error
Wed Jun 21 09:13:13 CEST 2023
Failed to index /usr/lib/jvm/java-9-openjdk-amd64/lib/jrt-fs.jar

java.io.FileNotFoundException: /usr/lib/jvm/java-9-openjdk-amd64/release (Datei oder Verzeichnis nicht gefunden)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.io.FileReader.<init>(FileReader.java:75)
    at org.eclipse.jdt.internal.compiler.util.Jdk.readJdkReleaseFile(JRTUtil.java:495)
    at org.eclipse.jdt.internal.compiler.util.Jdk.lambda$0(JRTUtil.java:448)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
    at org.eclipse.jdt.internal.compiler.util.Jdk.<init>(JRTUtil.java:446)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.getJrtSystem(JRTUtil.java:145)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:240)
    at org.eclipse.jdt.internal.core.search.indexing.AddJrtToIndex.execute(AddJrtToIndex.java:267)
    at org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:514)
    at java.base/java.lang.Thread.run(Thread.java:833)
rgrunber commented 1 year ago

I have a build that was last run ~3 weeks ago and went from passing to failing (see logs) with various Exception in thread "Java indexing" java.lang.OutOfMemoryError: Java heap space . They vary quite a bit but most are of the form :

2023-07-06T15:48:21.9694819Z ##[error]Exception in thread "Java indexing" java.lang.OutOfMemoryError: Java heap space
2023-07-06T15:48:21.9703608Z    at jdk.internal.jimage.BasicImageReader.getBufferBytes(BasicImageReader.java:356)
2023-07-06T15:48:21.9704193Z    at jdk.internal.jimage.BasicImageReader.getResource(BasicImageReader.java:412)
2023-07-06T15:48:21.9704713Z    at jdk.internal.jimage.ImageReader$SharedImageReader.getResource(ImageReader.java:569)
2023-07-06T15:48:21.9705210Z    at jdk.internal.jimage.ImageReader.getResource(ImageReader.java:109)
2023-07-06T15:48:21.9705970Z    at jdk.internal.jrtfs.SystemImage$1.getResource(SystemImage.java:69)
2023-07-06T15:48:21.9706445Z    at jdk.internal.jrtfs.JrtFileSystem.getFileContent(JrtFileSystem.java:250)
2023-07-06T15:48:21.9706938Z    at jdk.internal.jrtfs.JrtFileSystem.newByteChannel(JrtFileSystem.java:343)
2023-07-06T15:48:21.9707413Z    at jdk.internal.jrtfs.JrtPath.newByteChannel(JrtPath.java:702)
2023-07-06T15:48:21.9707944Z    at jdk.internal.jrtfs.JrtFileSystemProvider.newByteChannel(JrtFileSystemProvider.java:305)
2023-07-06T15:48:21.9708449Z    at java.base/java.nio.file.Files.newByteChannel(Files.java:380)
2023-07-06T15:48:21.9708849Z    at java.base/java.nio.file.Files.newByteChannel(Files.java:432)
2023-07-06T15:48:21.9709246Z    at java.base/java.nio.file.Files.readAllBytes(Files.java:3288)
2023-07-06T15:48:21.9709724Z    at org.eclipse.jdt.internal.compiler.util.JRTUtil.safeReadBytes(JRTUtil.java:323)
2023-07-06T15:48:21.9710302Z    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.lambda$1(JRTUtil.java:669)
2023-07-06T15:48:21.9710883Z    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem$$Lambda$333/0x0000000801494460.apply(Unknown Source)
2023-07-06T15:48:21.9711477Z    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
2023-07-06T15:48:21.9712085Z    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.getFileBytes(JRTUtil.java:667)
2023-07-06T15:48:21.9712742Z    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.getClassfileContent(JRTUtil.java:648)
2023-07-06T15:48:21.9713414Z    at org.eclipse.jdt.internal.compiler.util.JRTUtil.getClassfileContent(JRTUtil.java:268)
2023-07-06T15:48:21.9714281Z    at org.eclipse.jdt.internal.core.search.indexing.AddJrtToIndex$JrtIndexer.visitFile(AddJrtToIndex.java:140)
2023-07-06T15:48:21.9714951Z    at org.eclipse.jdt.internal.core.search.indexing.AddJrtToIndex$JrtTraverser.visitFile(AddJrtToIndex.java:1)
2023-07-06T15:48:21.9715565Z    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem$2.visitFile(JRTUtil.java:781)
2023-07-06T15:48:21.9716113Z    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem$2.visitFile(JRTUtil.java:1)
2023-07-06T15:48:21.9716565Z    at java.base/java.nio.file.Files.walkFileTree(Files.java:2811)
2023-07-06T15:48:21.9716958Z    at java.base/java.nio.file.Files.walkFileTree(Files.java:2882)
2023-07-06T15:48:21.9717482Z    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.walkModuleImage(JRTUtil.java:750)
2023-07-06T15:48:21.9718112Z    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:244)
2023-07-06T15:48:21.9718742Z    at org.eclipse.jdt.internal.core.search.indexing.AddJrtToIndex.execute(AddJrtToIndex.java:267)
2023-07-06T15:48:21.9719422Z    at org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:514)
2023-07-06T15:48:21.9720081Z    at org.eclipse.jdt.internal.core.search.processing.JobManager$$Lambda$159/0x000000080126a240.run(Unknown Source)
2023-07-06T15:48:21.9720552Z    at java.base/java.lang.Thread.run(Thread.java:833)

Is there anything in the past little while that may have caused this ?

Update: Sorry for the noise, I'm not sure anymore if this is even related, but the timing and part of the codebase seemed suspicious. Basically the Java indexing thread has started to run out of memory when importing Maven projects (via. m2e) and I can't figure out the cause.

Update 2: I think my issue is related to https://github.com/eclipse-jdt/eclipse.jdt.debug/issues/230 . I narrowed down the OOM to that commit. It's also affected by the number/type of JDKs one has installed on the system.