Chromium too many open files - tabs come a-crashin'
Lately Chromium tabs have been crashing a lot at irregular intervals. It looks like this:Like said before, the best way to get a handle on what is causing it is to start chromium in a terminal. Chances are the application is a lot more chatty in the terminal and giving hints as to why its acting up.
What version?
I'm running chromium Version 40.0.2214.111 (64-bit) but I've seen bug reports concerning version 36.0 and up. That bug reports means chromium is running into the limits of the OS regarding allowed open files.In other words - the more tabs you are using - the more chance there is that the new tabs (and old tabs) will be crashing looking like the sad sad image above.
Y u crash?
Lets dig into this a bit and learn a thing or two. This message would appear whenever a tab crashed.[13747:13770:0219/150755:ERROR:host_shared_bitmap_manager.cc(144)] Cannot create shared memory buffer [918:923:0219/150755:FATAL:child_shared_bitmap_manager.cc(55)] Check failed: memory->Map(memory_size). [WARNING:flash/platform/pepper/pep_module.cpp(63)] SANDBOXED
With some googling this turns out to be the soft limits of open file handles being applied to each chromium tab process. Lets dig. To get the limits of a process you can use prlimit of that process. Choose a chromium tab process id of your liking and hit it with prlimit.
jonasl@jonasl:~$ prlimit --pid 13747 RESOURCE DESCRIPTION SOFT HARD UNITS ... NOFILE max number of open files 1024 4096 ...
Or if you are really curious about that process, why don't you cd into its /proc/$pid directory hmmm? You can see the limits in a file called limits:
jonasl@jonasl:~$ cat /proc/13747/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size 2147483647 2147483647 bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 30772 30772 processes Max open files 1024 4096 files Max locked memory 1048576 1048576 bytes Max address space 17179869184 17179869184 bytes Max file locks unlimited unlimited locks Max pending signals 30772 30772 signals Max msgqueue size 819200 819200 bytes Max nice priority 30 30 Max realtime priority 65 65 Max realtime timeout unlimited unlimited us
jonasl@jonasl:~$ lsof -p 13747 | wc -l 1415
Wow imagine that, 1415, way over the soft limit of 1024. Again using prlimit you can raise the number of allowed open files by setting the soft (on the left of the colon, and hard limit on the right of the colon) like so:
jonasl@jonasl:~$ prlimit --pid 13747 --nofile=4096:4096
By now, that tab should have stopped chrashing with the sad sad image. Surf around a bit, and let's again count the numbers of open files:
jonasl@jonasl:~$ lsof -p 13747 | wc -l 1918
Y u crash really hard?
Just out of curiosity then, what happens if we lower the hard limit?jonasl@jonasl:~$ prlimit --pid 13747 --nofile=1024:1024
Surf some in the tab whose pid you just starved for open file handles. Since the hard limit is now 1024, it will crash all of its siblings and parent process (as opposed to just failing the local tab when enforcing the soft limit) with this funny message
[13747:13771:0219/151309:FATAL:zygote_host_impl_linux.cc(297)] Check failed: 0 == socketpair(AF_UNIX, SOCK_SEQPACKET, 0, raw_socks). : Too many open files Aborted (core dumped)
Three fixes for this
The fastest way to increase this is to close down chromium and up the limit with ulimit in the terminal before you start it again. This way you can see if this was your root issue before making the fix permanent. Hit:ulimit -n 4096 chromiumin a terminal. This will set the number of allowed open files per process to 4096 instead of the default 1024.
jonasl@jonasl:~$ prlimit --pid 15691 RESOURCE DESCRIPTION SOFT HARD UNITS ... NOFILE max number of open files 4096 4096 ...
jonasl@jonasl:~$ which chromium /usr/bin/chromium jonasl@jonasl:~$ sudo vim /usr/bin/chromium
Third and most impressive solution is if you are running on a desktop you can impress your friends with cranking up the number of allowed open files to whatever your liking screaming "I don't care". The main reason for having a limit is memory consumption. And you are probably not running chromium on your paltry embedded device.