Hi,
when Knime runs over a prolonged period of time, i.e. when scraping data, I noticed its UI becomes quite sluggish. Selecting nodes / components has a significant delay. Entering or exiting components, too. Switching from the browser to Knime also is noticably slow.
So slow, that even the execution status refuses to move which makes stopping execution close to impossible. The longer I let Knime run, the more likely it becomes that the app freezes / requiring me to kill it.
This isn’t new to 5.5, I also noticed it in 5.4.4. System utilization is reasonable / nothing indicates an impact to it.
I noticed that the thread count keeps raising, though.
The thread dump is also noticably larger.
Attached the zip disguised as a txt.
250723 Knime Slow UI threaddump-1753279133420.zip.txt (299.3 KB)
I will restart the process and Knime to assess if MUI is also impacted.
Best
Mike
So, MUI is also impacted and, call me a liar, noticalby earlier and to such a degree that opening context menus and other simple actions are even slower, not to speak about entering and exiting components.
Here is the thread dump.
250723 Knime Slow UI MUI threaddump-1753285293545.zip.txt (271.7 KB)
Let me know if you need anythign else.
Best
Mike
1 Like
Hello @mwiegand,
first up, thanks a lot for the thread dump - that is always super helpful! We found that the Selenium nodes by NodePit seem to be the issue here. Maybe you can quickly confirm that you are in fact using them to scrape the data.
@qqilihq, your Selenium nodes seem to pile up lots and lots of threads. In the thread dump shared above, we found 4244 threads, called “CDP Connection”.
This is an example stacktrace (click to expand).
"CDP Connection" #4600 daemon prio=3 os_prio=-1 cpu=0.00ms elapsed=5694.72s tid=0x000002692dc58070 nid=0xed74 waiting on condition [0x00000062696fe000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@17.0.5/Native Method)
- parking to wait for <0x0000025c8ccd7e00> (a java.util.concurrent.CompletableFuture$Signaller)
at java.util.concurrent.locks.LockSupport.park(java.base@17.0.5/Unknown Source)
at java.util.concurrent.CompletableFuture$Signaller.block(java.base@17.0.5/Unknown Source)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.5/Unknown Source)
at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.5/Unknown Source)
at java.util.concurrent.CompletableFuture.waitingGet(java.base@17.0.5/Unknown Source)
at java.util.concurrent.CompletableFuture.get(java.base@17.0.5/Unknown Source)
at org.openqa.selenium.devtools.idealized.Network.lambda$prepareToInterceptTraffic$4(Network.java:243)
at org.openqa.selenium.devtools.idealized.Network$$Lambda$5965/0x000000080310af58.execute(Unknown Source)
at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
at org.openqa.selenium.remote.http.Filter$$Lambda$5301/0x0000000803065118.execute(Unknown Source)
at org.openqa.selenium.devtools.idealized.Network.lambda$prepareToInterceptTraffic$5(Network.java:264)
at org.openqa.selenium.devtools.idealized.Network$$Lambda$5948/0x0000000803107630.accept(Unknown Source)
at org.openqa.selenium.devtools.DevTools.lambda$addListener$0(DevTools.java:108)
at org.openqa.selenium.devtools.DevTools$$Lambda$5941/0x0000000803106698.accept(Unknown Source)
at org.openqa.selenium.devtools.Connection.lambda$handle$5(Connection.java:348)
at org.openqa.selenium.devtools.Connection$$Lambda$5929/0x0000000803102100.accept(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(java.base@17.0.5/Unknown Source)
at java.util.stream.ReferencePipeline$2$1.accept(java.base@17.0.5/Unknown Source)
at java.util.stream.ReferencePipeline$15$1.accept(java.base@17.0.5/Unknown Source)
at java.util.HashMap$EntrySpliterator.forEachRemaining(java.base@17.0.5/Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(java.base@17.0.5/Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(java.base@17.0.5/Unknown Source)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(java.base@17.0.5/Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(java.base@17.0.5/Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(java.base@17.0.5/Unknown Source)
at java.util.stream.ReferencePipeline.forEach(java.base@17.0.5/Unknown Source)
at org.openqa.selenium.devtools.Connection.handle(Connection.java:311)
at org.openqa.selenium.devtools.Connection$Listener.lambda$onText$0(Connection.java:239)
at org.openqa.selenium.devtools.Connection$Listener$$Lambda$5905/0x00000008030fe000.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.5/Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.5/Unknown Source)
at java.lang.Thread.run(java.base@17.0.5/Unknown Source)
Locked ownable synchronizers:
- <0x0000025c90ccf700> (a java.util.concurrent.ThreadPoolExecutor$Worker)
But this also means that we from KNIME cannot help in resolving this issue, unfortunately.
Best, Leon
5 Likes
Yes, I can confirm I use Selenium Nodes.
@qqilihq AMA is you need more details. Happy to assist.
2 Likes
It seems like @qqilihq is no longer active? Maybe @danielesser can help with this issue.
1 Like
Hi all - I remember being in touch with you about this a while ago, mwiegand. I couldn’t reproduce this issue back then, despite trying a plethora of setups. So, in the hope that the answer is “no” - is this still an issue, after all?
Thx,
Philipp