You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When indexing bunch of projects from scratch with 1.13.4, I was watching CPU utilization in the 2nd phase of the indexing. There was bunch of bigger projects like Linux, FreeBSD, AOSP. During most of the time, the CPUs were loaded, however at the end of the indexing when only AOSP remained, there was just a single ForkJoin thread processing the files, all the other threads from the ForkJoin pool were in the WAITING state in ForkJoinPool.runWorker() so the indexer was basically degraded to serial processing, making the machine underutilized and the whole reindex taking too much time. This become even more apparent due to the fact that annotation cache was enabled so the sole thread spent the most of time generating the annotation cache entry for given file before moving onto the next file.
I thought the purpose of the ForkJoin pool is that other threads from the pool can steal the work from the dequeues of other threads however this does not seem to be happening at that point for some reason.
When indexing bunch of projects from scratch with 1.13.4, I was watching CPU utilization in the 2nd phase of the indexing. There was bunch of bigger projects like Linux, FreeBSD, AOSP. During most of the time, the CPUs were loaded, however at the end of the indexing when only AOSP remained, there was just a single ForkJoin thread processing the files, all the other threads from the ForkJoin pool were in the
WAITING
state inForkJoinPool.runWorker()
so the indexer was basically degraded to serial processing, making the machine underutilized and the whole reindex taking too much time. This become even more apparent due to the fact that annotation cache was enabled so the sole thread spent the most of time generating the annotation cache entry for given file before moving onto the next file.I thought the purpose of the ForkJoin pool is that other threads from the pool can steal the work from the dequeues of other threads however this does not seem to be happening at that point for some reason.
The indexer was run as follows:
where the read-only configuration had annotation cache enabled globally.
jstack output: jstack-end-of-indexing.txt
The indexer log snippet at the end of the indexing:
It basically took ~15 minutes to process 100 files. The
prstat -L
output at that point shows the sole processing thread:This is a machine with 32 CPUs and 128GB RAM.
The text was updated successfully, but these errors were encountered: