Fixing Firefox performance and lock-ups on Linux

I’ve been using Ubuntu (8.04 then 8.10) reasonably heavily over the last 12 months or so as my main operating system on two of my home computers (a Dell Mini 9″ and a quad core desktop).

I’ve been pretty happy with it except for the infuriating habit Firefox has for “locking up” periodically. The symptoms of this include non-reponsiveness, screen freezing and even the computer being unusable for 30 seconds at a time. The only clue I had was there seemed to be large amounts of disk usage.

After a while bitching and moaning about it I got so annoyed I started looking for a fix.

The first thing I tried was the Chromium Linux nightly builds. Google says “blogging about this isn’t helpful”, so I won’t except to say that I’ve got pretty high expectations of Chrome on Linux and so far I haven’t had to re-apprise that.

All the same, I wanted to fix Firefox. The next thing I tried was moving Firefox cache to a RAM drive. That’s pretty easy – just set it to use a directory under /dev/shm/ for the cache location.

I think that improved the situation marginally, but not enough to call it a fix.

The next thing I tried was to raise a Firefox bug. Somewhat to my surprise that got linked to another bug which was marked as fixed.

The comments on that bug are quite long, but the story is this:

  • Firefox uses SQLite as a database for its history and bookmarks.
  • SQLite, being a database is very concerned about data integrity, and to implement this it relies on the fsync system call.
  • fsync has performance issues on ext3 filesystems. See for example, http://lwn.net/Articles/328363/:

    The problem, in short, is this: the ext3 filesystem, when running in the default data=ordered mode, can exhibit lengthy stalls when some process calls fsync() to flush data to disk. This issue most famously manifested itself as the much-lamented Firefox system-freeze problem, but it goes beyond just Firefox.

  • SQLite has a no-sync mode, which trades reliability for performance.
  • Firefox can use this mode via a config setting.

So the outcome of all that is this:

Create a new config key “toolkit.storage.synchronous” and set it to the integer 0 to stop Firefox lock-ups on Linux (but be aware that there is some chance a power failure could cause loss of your history and/or bookmarks).

One thought on “Fixing Firefox performance and lock-ups on Linux

  1. Hey Bad, this is really good and interesting info. Thanks!

    I’ve put in that new key and for 3 or 4 days now the annoying hangs (Ubuntu 9.04+FF3.0.10) have pretty much stopped. The (much shorter) hangs I’m getting now seem to be correlated with either news.google.com (refresh every 15min) or cbssports.com (lots of pushing and shoving during game time, esp. in the Game Center mode). When those sites are active in other tabs, and I scroll a long page in a third tab (esp. one with images), it starts to stumble. Could be the same problem or maybe it’s the onboard graphics (128MB) getting jammed.

    Anyway, much better now. FF should make this no-sync mode easier to turn on, or detect ext3 fs and turn it on automagically. I’ll report back in another week or two.

Leave a Reply

Your email address will not be published. Required fields are marked *