Ulimit value : All you need to know


What is ulimit


Understand what is ulimit? How to set it? Which all system resources can be limited using ulimit control? and how to view current ulimit settings.

 


In this article we are going to see everything about bash built in “ulimit” value. This is your key to keep system safe from fork bombs or malicious codes aimed to hung systems by crunching resources.

What is ulimit?

It can roughly called as user limit! Using this value you are limiting shell and its forked processes to use certain defined system resources. This helps in managing system resources and in turns processes efficiently. Using “ulimit” you can make sure that all important processes on server always gets resources while lee important onces cant hog more than what they should get. There are different parameters can be defined under ulimit umbrella which we will see ahead.

To view your current “ulimit” setting run below command :

As you can see in above output, left column denotes parameters which can be limited using ulimit, along with their measuring unit and option to be used in braces and last column shows current set value.


ulimit controlled parameters :

See below list of parameters which can be limit using ulimit and their details. List is from man page and parameters are self explanatory. Since this is bash built in; when you check manpage, you will see all bash commands. You have to scroll that man page all the way to bottom (since its alphabetically sorted) to get to “ulimit” section. There you will find these parameters.

To set specific parameter limit values, you can issue command :

Once done, it will limit this parameter for current shell (shell from where command was ran) and its all forked processes. More efficient way to implement limits is through profiles which is discussed next.


How to setup ulimit :

Most common use in corporate Infra is for database servers. Since we all know that DB is resource hungry application. So many times ulimits specified to it in terms of  -p or -n etc. This setting is done in DB owner user id like oracle’s (user id with which db application runs on server) .bash_profile in its home or /etc/profile or through custom scripts which loads when DB starts. Find below code snippet which can be used in /etc/profile:

Whenever users logged in, /etc/profile gets executed. It checks if user is oracle or oradb and if yes with ksh shell, it sets respective ulimits values for it!

This ensures parameters are set for that user’s shell when DB application starts in user’s shell. Since “ulimit”, limits resources for shell and its forked processes, these values gets imposed for DB apps running under that user’s shell!


Any thoughts?