Chromium tabs crashing and not rendering correctly?
Posted: Sat, 30 August 2014 | permalink | No comments
If you’ve noticed your chrome/chromium on Linux having problems since you upgraded to somewhere around version 35/36, you’re not alone. Thankfully, it’s relatively easy to workaround. It will hit people who keep their browser open for a long time, or who have lots of tabs (or if you’re like me, and do both).
To tell if you’re suffering from this particular problem, crack open your
~/.xsession-errors
file (or wherever your system logs stdout/stderr from
programs running under X), and look for lines that look like this:
[22161:22185:0830/124533:ERROR:shared_memory_posix.cc(231)]
Creating shared memory in /dev/shm/.org.chromium.Chromium.gFTQSy
failed: Too many open files
And
[22161:22185:0830/124601:ERROR:host_shared_bitmap_manager.cc(122)]
Cannot create shared memory buffer
If you see those errors, congratulations! The rest of this blog post will be of use to you.
There’s probably a myriad of bugs open about this problem, but the one I found was #367037: Shared memory-related tab crash. It turns out there’s a file handle leak in the chromium codebase somewhere, relating to shared memory handling. There’s no fix available, but the workaround is quite simple: increase the number of files that processes are allowed to have open.
System-wide, you can do this by creating a file
/etc/security/limits.d/local-nofile.conf
, containing this line:
* - nofile 65535
You could also edit /etc/security/limits.conf
to contain the same line, if
you were so inclined. Note that this will only take effect next time you
login, or perhaps even only when you restart X (or, at worst, your entire
machine).
This doesn’t help you if you’ve got Chromium already open and you’d like to
stop it from crashing Right Now (perhaps restarting your machine would be a
terrible hardship, causing you to lose your hard-won uptime record), then
you can use a magical tool called prlimit
.
The prlimit
syscall is available if you’re running a Linux 2.6.36 or later
kernel, and running at least glibc 2.13. You’ll have a prlimit
command
line program if you’ve got util-linux 2.21 or later. If not, you can use
the example source code in the prlimit
(2) manpage, changing RLIMIT_CPU
to RLIMIT_NOFILE
, and then running it like this:
prlimit <PID> 65535 65535
The <PID>
argument is taken from the first number in the log messages from
.xsession-errors
– in the example above, it’s 22161
.
And now, you can go back to using your tabs as ersatz bookmarks, like I do.
Post a comment
All comments are held for moderation; markdown formatting accepted.