Community
Participate
Working Groups
not responding when opening a folder with a lot of files, I have enough free CPU and memory available Eclipse SDK Version: 3.1.0 downloaded wtp all in one at http://www.eclipse.org/downloads/download.php? file=/webtools/downloads/drops/R-0.7-200507290654/wtp-all-in-one-0.7-win32.zip windows 2000 Pentium 4 1.7 GHz processor 512mb RAM
Could you be more specific about the quantity behind "a lot" of files? Did any of the projects in your workspace has been created by WTP?
Please provide more details: - What do you mean by "not responding"? Did it hang completely, or just pause for a few seconds? At this point, is the CPU usage still high? If it is indeed hung, then please launch with java.exe (eclipse -vm d:\jre\bin\java.exe) and hit Ctrl+Break in the command window when it is hung. This will produce a stack dump that will show where it is hanging. - Does this only happen with WTP projects? - Where are you "opening a folder" - in the Navigator view, or elsewhere?
It happens even in the navigater view here is the Thread Dump Full thread dump Java HotSpot(TM) Client VM (1.4.2_04-b05 mixed mode): "Worker-3" prio=5 tid=0x0094b850 nid=0x6dc in Object.wait() [254ff000..254ffd88] at java.lang.Object.wait(Native Method) - waiting on <0x11600010> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173) - locked <0x11600010> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob (WorkerPool.java:205) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:69) "Worker-2" prio=5 tid=0x2439ea20 nid=0x6d0 in Object.wait() [254bf000..254bfd88] at java.lang.Object.wait(Native Method) - waiting on <0x11600010> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173) - locked <0x11600010> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob (WorkerPool.java:205) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:69) "Worker-1" prio=5 tid=0x2480bb40 nid=0x694 in Object.wait() [2547f000..2547fd88] at java.lang.Object.wait(Native Method) - waiting on <0x11600010> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173) - locked <0x11600010> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob (WorkerPool.java:205) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:69) "Java indexing" daemon prio=4 tid=0x246aee18 nid=0x69c in Object.wait() [2534f000..2534fd88] at java.lang.Object.wait(Native Method) - waiting on <0x1178e4c0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager) at java.lang.Object.wait(Object.java:429) at org.eclipse.jdt.internal.core.search.processing.JobManager.run (JobManager.java:349) - locked <0x1178e4c0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager) at java.lang.Thread.run(Thread.java:534) "Worker-0" prio=5 tid=0x2453ea10 nid=0x2cc waiting on condition [2513f000..2513fd88] at java.lang.Thread.sleep(Native Method) at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run (DecorationScheduler.java:249) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76) "Start Level Event Dispatcher" daemon prio=5 tid=0x2444d648 nid=0x554 in Object.wait() [2462f000..2462fd88] at java.lang.Object.wait(Native Method) - waiting on <0x11488778> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:429) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent (EventManager.java:349) - locked <0x11488778> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run (EventManager.java:287) "Framework Event Dispatcher" daemon prio=5 tid=0x0099c0e8 nid=0x520 in Object.wait() [245ef000..245efd88] at java.lang.Object.wait(Native Method) - waiting on <0x1143f5b0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:429) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent (EventManager.java:349) - locked <0x1143f5b0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run (EventManager.java:287) "State Data Manager" daemon prio=5 tid=0x2444fb38 nid=0x84 waiting on condition [245af000..245afd88] at java.lang.Thread.sleep(Native Method) at org.eclipse.osgi.framework.adaptor.core.StateManager.run (StateManager.java:289) at java.lang.Thread.run(Thread.java:534) "Signal Dispatcher" daemon prio=10 tid=0x00921d10 nid=0x4f8 waiting on condition [0..0] "Finalizer" daemon prio=9 tid=0x0091eee0 nid=0x6cc in Object.wait() [2422f000..2422fd88] at java.lang.Object.wait(Native Method) - waiting on <0x113c0138> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0x113c0138> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x0091da58 nid=0x324 in Object.wait() [241ef000..241efd88] at java.lang.Object.wait(Native Method) - waiting on <0x113c01a0> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:429) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115) - locked <0x113c01a0> (a java.lang.ref.Reference$Lock) "main" prio=7 tid=0x00235d58 nid=0x4f0 runnable [6d000..6fc40] at java.io.FileInputStream.available(Native Method) at org.eclipse.core.internal.resources.ContentDescriptionManager$LazyFileInputStrea m.available(ContentDescriptionManager at org.eclipse.core.internal.content.LazyInputStream.available (LazyInputStream.java:31) at org.eclipse.wst.html.core.internal.contenttype.ByteReader.ready (ByteReader.java:98) at org.eclipse.wst.html.core.internal.contenttype.HTMLResourceEncodingDetector.chec kHeuristics(HTMLResourceEncodingDetec at org.eclipse.wst.html.core.internal.contenttype.HTMLResourceEncodingDetector.pars eInput(HTMLResourceEncodingDetector.j at org.eclipse.wst.html.core.internal.contenttype.AbstractResourceEncodingDetector. getEncodingMemento(AbstractResourceEn or.java:138) at org.eclipse.wst.html.core.internal.contenttype.ContentDescriberForHTML.handleCal culations(ContentDescriberForHTML.jav at org.eclipse.wst.html.core.internal.contenttype.ContentDescriberForHTML.calculate SupportedOptions(ContentDescriberForH at org.eclipse.wst.html.core.internal.contenttype.ContentDescriberForHTML.describe (ContentDescriberForHTML.java:34) at org.eclipse.core.internal.content.ContentType.describe (ContentType.java:162) at org.eclipse.core.internal.content.ContentType.internalGetDescriptionFor (ContentType.java:448) at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor (ContentTypeCatalog.java:312) at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor (ContentTypeCatalog.java:316) at org.eclipse.core.internal.content.ContentTypeMatcher.getDescriptionFor (ContentTypeMatcher.java:87) at org.eclipse.core.internal.resources.ContentDescriptionManager.readDescription (ContentDescriptionManager.java:394) at org.eclipse.core.internal.resources.ContentDescriptionManager.getDescriptionFor (ContentDescriptionManager.java:333) - locked <0x116cb960> (a org.eclipse.core.internal.resources.ContentDescriptionManager) at org.eclipse.core.internal.resources.File.getContentDescription (File.java:276) at org.eclipse.ui.ide.IDE.getContentType(IDE.java:960) at org.eclipse.ui.internal.ide.model.WorkbenchFile.getBaseImage (WorkbenchFile.java:34) at org.eclipse.ui.internal.ide.model.WorkbenchResource.getImageDescriptor (WorkbenchResource.java:45) at org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider.getWorkbenchIma geDescriptor(JavaElementImageProvider at org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider.computeDescript or(JavaElementImageProvider.java:117) at org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider.getImageLabel (JavaElementImageProvider.java:92) at org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider.getImage (JavaUILabelProvider.java:138) at org.eclipse.jface.viewers.DecoratingLabelProvider.getImage (DecoratingLabelProvider.java:82) at org.eclipse.jface.viewers.DecoratingLabelProvider.updateLabel (DecoratingLabelProvider.java:212) at org.eclipse.jface.viewers.StructuredViewer.buildLabel (StructuredViewer.java:1855) at org.eclipse.jface.viewers.TreeViewer.doUpdateItem(TreeViewer.java:228) at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run (AbstractTreeViewer.java:85) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:1044) at org.eclipse.core.runtime.Platform.run(Platform.java:783) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:148) at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem (AbstractTreeViewer.java:621) at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run (StructuredViewer.java:434) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:1044) at org.eclipse.core.runtime.Platform.run(Platform.java:783) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:148) at org.eclipse.jface.viewers.StructuredViewer.updateItem (StructuredViewer.java:1763) at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem (AbstractTreeViewer.java:535) at org.eclipse.jface.viewers.AbstractTreeViewer$1.run (AbstractTreeViewer.java:514) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren (AbstractTreeViewer.java:494) at org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand (AbstractTreeViewer.java:948) at org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded (AbstractTreeViewer.java:959) at org.eclipse.swt.widgets.TypedListener.handleEvent (TypedListener.java:180) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:867) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:852) at org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:3704) at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3568) at org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:1035) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3089) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3706) at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1580) at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:219) at org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:2815) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3071) at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:2391) at org.eclipse.swt.widgets.Display.windowProc(Display.java:3706) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1656) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2711) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench (Workbench.java:367) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143) at org.eclipse.ui.internal.ide.IDEApplication.run (IDEApplication.java:103) at org.eclipse.core.internal.runtime.PlatformActivator$1.run (PlatformActivator.java:226) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:376) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:163) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334) at org.eclipse.core.launcher.Main.basicRun(Main.java:278) at org.eclipse.core.launcher.Main.run(Main.java:973) at org.eclipse.core.launcher.Main.main(Main.java:948) "VM Thread" prio=5 tid=0x0095d058 nid=0x514 runnable "VM Periodic Task Thread" prio=10 tid=0x0023ea78 nid=0x2f8 waiting on condition "Suspend Checker Thread" prio=10 tid=0x009213c0 nid=0x604 runnable
Hi I have also the same problem by opening a big folder, please fix it emergency. Thank
I forgot to mention the project is a regular java project not a wtp project ( it was created with a previous eclipse version)
What do you mean by "not responding"? Does it hang completely, or just pause for a long time? The stack trace does not look like a hung process - maybe it is just an issue of slow performance?
this Thread dump that I had posted was right away, I'll wait a few minutes and than check if the Thread Dump is different. I have waited an half hour and it still hung. how long would you think it is acceptable to wait ?
I agree with John, this is not blocked, it is actually doing too much work in the UI thread (on Windows, this would cause a "Eclipse is not responding" caption to appear on the window bar). I am curious: how many HTML files you have in that folder? Kim, what if you just used name-based content type matching when figuring out the image to use to decorate a resource? The icon showing would not match the content type sometimes (might show an XML icon for an Ant script no called build.xml), but the performance would be much better (no files read). The context menu actions should still use IFile.getContentDescription(). You could replace: IContentType contentType = file.getContentDescription().getContentType(); with something like this: IContentTypeMatcher matcher = file.getProject().getContentTypeMatcher(); IContentType contentType = matcher.findContentType(file.getName());
I have their over 500 files. ( and this is with out the files I have in subfolders )
Moving to UI to consider Rafael's suggestion. Currently every file is parsed to determine the content type for computing the file's label in the Navigator. This is quite expensive for complex content types and large directories.
This is probably a good candidate for 3.1.1
Minimal guessing fix is in HEAD. Tod suggested that we augment this along the same lines as decorators - use the guess for the initial value then spawn a job to calculate the real image. I looked into this in the 3.1 time span and it was not a trivial amount of work to get our workbench model objects to behave in this manner. We might be able to revisit this at some point. Mvm, 3.1.1?
Marking as fixed until the decision is made.
Just to confirm, did this make it into 3.1.1? It appears so, from some CVS tags (having an M August tag) but hard for me to tell). If not, I would recommend it. See also bug 106158.
I would appreciate it if someone who has this problem could try out a 3.2 build (I20050913 for example) to see if the change has actually helped before we consider this for 3.1.1?
Consider it confirmed. So, I'll re-open as an official request for inclusion in 3.1.1. I used our automated test, as mentioned in bug 106158 in my development environment. (And, I think, pretty good test ... creates the project, with files, THEN begins timing, then expands tree, etc). I loaded following classes in my 3.1 baesd "development workspace" WorbenchFile revision 1.6 (instead of 1.5) IDE revision 1.42 (instead of 1.41) with workbench fix Scenario 'org.eclipse.wst.html.ui.tests.performance.OpenNavigatorFolderTest#testOpenNa vigatorFolder()' (average over 1 samples): Used Java Heap: 674.41K Working Set: 1.88M Committed: 1.24M Working Set Peak: 1.79M * Elapsed Process: 821 ms Kernel time: 40 ms Page Faults: 534 CPU Time: 731 ms GDI Objects: 4 without workbench fix Scenario 'org.eclipse.wst.html.ui.tests.performance.OpenNavigatorFolderTest#testOpenNa vigatorFolder()' (average over 1 samples): Used Java Heap: 537.75K Working Set: 3.35M Committed: 2.42M Working Set Peak: 3.26M * Elapsed Process: 3.47 m Kernel time: 2.46 m Page Faults: 1.11K CPU Time: 3.38 m GDI Objects: 4 * Notice the elapsed time goes from 3.46 Minutes to 821 msecs. (I ran each test a few times, from scratch, to make sure consistent neighborhood, which is was, but just reporting one run). After confirming with these automated tests, I confirmed from the point of view of an end user, using the same test project as above, with "second instance" of eclipse in dev. environment. With fix, very snappy expansion of project in navigator view. Without fix, I had plenty of time to finish submitting this bug request :) [seemed at least 3 minutes!]
I'm in favour of putting this into 3.1.1. It would be nice David if you could you provide a generic version of your test that can put in our performance test suite to ensure we don't regress? Is this possible?
Created attachment 27127 [details] Patch against org.eclipse.ui.ide This patch differs from what's currently in HEAD. The solution applied to head introduced a new API method on IDE to guess at the content type. This patch has the method inlined in WorkbenchFile.
This patch should be released before RC2 build on Sept 23rd for testing purposes.
Just to make a nit comment on the patch ... is it ok to catch and ignore a CoreException? Shouldn't it at least be logged. Just a little pet peeve of mine, since sometimes that practice makes bugs reeally hard to track down.
In reply to comment 17, yes, I've prepared a "neutral" test that can be used for confirmation and added for regression tests. I do not know exactly how to "get into" your test suite (that is, I'm sure you have system, or something) but will propose these patches as your starting point. Hopefullly its close and you won't have to change much to put it where you'd really like it. I'll attach patches for org.eclipse.ui.tests. 2 new classes, a change to the plugin.xml, and even hooked into a "suite". A second attachement will contain a zip for the the data files, to be put in the data folder.
Created attachment 27247 [details] two new classes, addition to plugin.xml, and "suite" addition. For org.eclipse.ui.tests OpenNavigatorFolderTest -- main test class ContentDescriberForTestsOnly -- a time consuming content describer the patch to plugin.xml is to define a contentType for files with an extension of 'htmltestonly'
Created attachment 27248 [details] 2500 "neutral" files with an extension of htmltestonly to be left as a zip file, and placed in org.eclipse.ui.tests/data The performance test "unzips" it into a project during the test, then that project "expanded" in the navigator. (only expansion is timed, not the unzipping ... which takes for ever :)
David: According to the Javadoc, a CoreException can only occur in that case if the project does not exist or the project is not open. In either of these cases we wouldn't reach the code that would generate an icon for the file in the project so it's safe to ignore IMO. Patch submitted to head. I will now investigate backporting the test to 3.0 and 3.1 performance streams.
Test has been ported everywhere + kitchen sink.
Using the supplied content type zip I was able to confirm that the expand time is acceptable in M20050923-1430
People are starting to file bugs https://bugs.eclipse.org/bugs/show_bug.cgi?id=139756 about files showing up with the wrong icons in the navigator. Any timeframe for the solution proposed in https://bugs.eclipse.org/bugs/show_bug.cgi?id=107121#c12 ?
Valentin, you should open a new bug against Platform-UI for this as it is a separate issue from the original problem reported in this bug.