ulimit allows you to limit the resources that a process can use.
Two use cases:
- You have a program that sometimes runs out of memory, slowing your computer
down to a crawl. You can use
ulimit -vto limit the amount of memory that processes in a shell can use. If a process tries to allocate more memory than that, the allocation will fail and the program will usually abort.
- You have a program with a deep recursion, which segfaults with the default
stack limit of 8M. You can use
ulimit -sto increase the allowed stack size.
There are many more limits you can set; type
help ulimit in bash to list
them. You can find out the current limits by typing
Two gotchas that I always forget about:
- You may try to limit the memory usage of a process by setting the maximum
resident set size (
ulimit -m). This has no effect on Linux.
man setrlimitsays it used to work only in ancient versions. You should limit the maximum amount of virtual memory (
ulimit -v) instead.
ulimithas hard limits and soft limits. Hard limits can be decreased but not increased. You can shoot yourself in the foot if you set your hard limit too low. I recommend using soft limits only. Set them with, for example,
ulimit -Sv, and query them with