Firefox consumes CPU when accessing tags
Accessing bookmark tags in FF 3.6.11 consumes the CPU 100% for 30+ seconds before browser responds. For example I have a saved search of everything with the tag 'tiddly' and when I access the search I have a significant delay (30+seconds) before the small list displays. Modifying a tag on a bookmark takes a similar lengthy time. This behavior is new with 3.6.11. I can revert back to 3.6.10 and things are OK.
All Replies (6)
I've confirmed that this problem persists with all plugins removed. I am a heavy user of tags and this problem makes FF unusable for me.
Tried 3.6.12 with the same results. Stuck at 3.6.10 until this is resolved. Or I guess I'll go look at Chrome...
ps. I ended up posting this twice because I can't seem to locate it from a search. It doesn't show up in a search for 'cpu' or 'tags'.
This can be a problem with the file places.sqlite that stores the bookmarks and the history.
Do you have a large amount of bookmarks?
sqlite> select count() from moz_bookmarks;
9933
The DB file is 24M.
Performance is fine with 3.6.10 so something has changed with how the tags are being accessed in 3.6.11.
I'm going to try running some cleanup on the db to see if that helps anything.
Modified
Deleted places.sqlite. It was rebuilt on restart to be only 1.8M, partially I suspect because the favicon data was gone for all the sites. In any event the behavior persisted in 3.6.12 - access to a saved search based on a tag pegged the FF process at 100% for about 20 seconds.
In 3.6.10 I notice there is a slight delay, sub-second, when I click on the saved search and later clicks respond immediately.
Something has changed in how tags are being access in the DB from 3.6.10 to 3.6.11.
The problem persists with 3.16.13. :(
Thread 0 Crashed: Dispatch queue: com.apple.main-thread 0 libsqlite3.dylib 0x01177433 sqlite3_clear_bindings + 3571 1 libsqlite3.dylib 0x011b3c28 sqlite3_blob_open + 30584 2 libsqlite3.dylib 0x011a2230 sqlite3_step + 112 3 XUL 0x009a5960 JSD_GetValueForObject + 332144 4 XUL 0x009c3b43 JSD_GetValueForObject + 455507 5 XUL 0x009cc57e JSD_GetValueForObject + 490894 6 XUL 0x009e6ffc JSD_GetValueForObject + 600076 7 XUL 0x009e84c2 JSD_GetValueForObject + 605394 8 XUL 0x009eb608 JSD_GetValueForObject + 618008 9 XUL 0x00b12058 NS_InvokeByIndex_P + 88 10 XUL 0x00053f6e DumpJSStack + 177550 11 XUL 0x000588cc DumpJSStack + 196332 12 libmozjs.dylib 0x0100bef8 js_Invoke + 1128 13 libmozjs.dylib 0x0100c91e js_Invoke + 3726 14 libmozjs.dylib 0x0100cbb0 js_Invoke + 4384 15 libmozjs.dylib 0x010196b7 js_GetterOnlyPropertyStub + 11095 16 libmozjs.dylib 0x010200b0 js_LookupProperty + 17120 17 libmozjs.dylib 0x00ffc074 JS_HashTableRawRemove + 3156 18 libmozjs.dylib 0x0100c060 js_Invoke + 1488 19 libmozjs.dylib 0x0100c91e js_Invoke + 3726 20 libmozjs.dylib 0x00faff6e JS_CallFunctionValue + 62 21 XUL 0x005b3fb1 void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 3941553 22 XUL 0x005f78a8 void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 4218280 23 XUL 0x0057f0e2 void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 3724770 24 XUL 0x0057c119 void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 3712537 25 XUL 0x0047268d void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 2624397 26 XUL 0x00472c9d void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 2625949 27 XUL 0x0048d7d4 void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 2735316 28 XUL 0x0048e1aa void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 2737834 29 XUL 0x0048ec9d void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 2740637 30 XUL 0x003cbf7e void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 1942654 31 XUL 0x003cc261 void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 1943393 32 XUL 0x00b024a7 NS_GetComponentRegistrar_P + 36279 33 XUL 0x00ac22b7 JNIEnv_::CallStaticObjectMethod(_jclass*, _jmethodID*, ...) + 278695 34 XUL 0x00a64322 JSD_GetValueForObject + 1112882 35 XUL 0x00a2cc3e JSD_GetValueForObject + 885838 36 com.apple.CoreFoundation 0x90ebc4cb __CFRunLoopDoSources0 + 1563 37 com.apple.CoreFoundation 0x90eb9f8f __CFRunLoopRun + 1071 38 com.apple.CoreFoundation 0x90eb9464 CFRunLoopRunSpecific + 452 39 com.apple.CoreFoundation 0x90eb9291 CFRunLoopRunInMode + 97 40 com.apple.HIToolbox 0x991f0f9c RunCurrentEventLoopInMode + 392 41 com.apple.HIToolbox 0x991f0c8d ReceiveNextEventCommon + 158 42 com.apple.HIToolbox 0x991f0bd6 BlockUntilNextEventMatchingListInMode + 81 43 com.apple.AppKit 0x9718678d _DPSNextEvent + 847 44 com.apple.AppKit 0x97185fce -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156 45 com.apple.AppKit 0x97148247 -[NSApplication run] + 821 46 XUL 0x00a2c7da JSD_GetValueForObject + 884714 47 XUL 0x008b2697 void std::__adjust_heap<__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)>(__gnu_cxx::__normal_iterator<nsRefPtr<imgCacheEntry>*, std::vector<nsRefPtr<imgCacheEntry>, std::allocator<nsRefPtr<imgCacheEntry> > > >, int, int, nsRefPtr<imgCacheEntry>, bool (*)(nsRefPtr<imgCacheEntry> const&, nsRefPtr<imgCacheEntry> const&)) + 7080855 48 XUL 0x0001104b XRE_main + 15723 49 org.mozilla.firefox 0x00002cb8 start + 2168 50 org.mozilla.firefox 0x00002542 start + 258 51 org.mozilla.firefox 0x00002469 start + 41</pre>
Modified
I think this might be related to this bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=595530
Looks like a regression in sqlite3 performance.