3

I'm trying to limit the memory usage of firefox to prevent it from stalling the whole system with problematic web sites.

I tried, in bash:

(ulimit -d 1000; firefox) &

This should limit the memory usage to 1000kB. Then I opened YouTube, and noticed, in top, that firefox is using 2.6% of the memory, or about 200MB, and not crashing. Clearly the limit is being ignored. Why is that, and how can I enforce it correctly?

3
  • Er, I'm confused. Is -d supposed to limit the heap? I thought the heap was considered separate from the data segment, but the manpage for setrlimit(2) says that RLIMIT_DATA sets The maximum size of the process's data segment (initialized data, uninitialized data, and heap).
    – rakslice
    Aug 24, 2014 at 4:28
  • @rakslice as your quote suggests, the data segment includes everything. On Linux, I believe a process just asks the OS to resize its "space" (data segment). It's up to the library (libc) to present a convenient interface (malloc/heap).
    – MWB
    Aug 24, 2014 at 5:37
  • 1
    Does it work without the sub-shell? I.e., what happens if you do ulimit -d 1000; firefox? Also, does ulimit -m do what you want?
    – sds
    Aug 24, 2014 at 5:52

1 Answer 1

5

Use ulimit -v instead.

Explanation:

Current libc implementations resize the data segment only for small mallocs, big mallocs use anonymous mmap()ing so the only way to really limit the program is to limit virtual memory instead (-v switch).

Hope this helps.

PS: I know this question is very old but failed to find a solution with Google so decided to answer anyway.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .