The purpose of this post is to explain how to configure kernel parameters on Red Hat (RHEL/CentOS) and Oracle Linux (OL) systems using the sysctl utility. The sysctl utility (/sbin/sysctl) allows (privileged) users to query and modify kernel parameters during runtime. The utility is common to most Linux distributions, however, subtle differences may exist between distributions e.g. RHEL/OL and SuSE. Parameters that can be viewed/modified are those exposed via procfs filesystem /proc/sys. The dot(“.”) notation is used when setting in a configuration file.


Querying a Specific Kernel Parameter


To query a named kernel parameter value, run the sysctl utility with either the ‘-n‘ or no arguments at all e.g.:



In the example above, parameter kernel.shmmax relates to /proc/sys/kernel/shmmax e.g.:

# cat /proc/sys/kernel/shmmax


Querying all the kernel parameters


To query all kernel parameter values, run the systctl utility with the ‘-a‘ argument e.g.:

# sysctl -a | more
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 4000000
kernel.sched_latency_ns = 20000000
kernel.sched_wakeup_granularity_ns = 4000000
kernel.sched_tunable_scaling = 1


You can grep for a specific kernel parameter in the above output. Use Regular expressions for filtering out a group of kernel parameters. For Example,

# sysctl -a | grep ^kernel.s[h,e]m
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.shm_rmid_forced = 0
kernel.sem = 250	32000	100	128


Setting Kernel Parameters immediately (not persistently)


To set a sysctl parameter value immediately (not persistent) use the sysctl -w command. For Example :

# sysctl -w kernel.sysrq=0
kernel.sysrq = 0


Parameter which take multiple values should have the values enclosed in quotes. For example, to set net.ipv4.ip_local_port_range to 1025-65535:

# sysctl -w net.ipv4.ip_local_port_range="1025 65535"


Alternatively, it is possible to echo values directly into the procfs file which represents a sysctl parameter. For example:

# echo 1 > /proc/sys/net/ipv4/ip_forward
# echo "1025 65535" > /proc/sys/net/ipv4/ip_local_port_range


Setting Kernel Parameters Persistently


Kernel parameter values changed using the ‘systctl -w’ method are volatile i.e. lost on server reboot. The sysctl utility’s configuration file, /etc/sysctl.conf, should be used to permanently store non-default kernel parameter values. The file is parsed on server boot and values within are used to configure the kernel. The syntax required to configure kernel parameters using the /etc/sysctl.conf file follows the component.parameter=value notation e.g. kernel.shmmax = 33554432.


# vi /etc/sysctl.conf


Following is a sample /etc/sysctl.conf file:

# grep -v ^# /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0


Along with using the ‘systctl -w’ method to modify kernel parameters, one may also modify parameters by adding them to the /etc/sysctl.conf file, then parsing the file using the sysctl utility with the ‘-p‘ argument e.g.:

# sysctl -n kernel.ctrl-alt-del


# echo "kernel.ctrl-alt-del=1" >> /etc/sysctl.conf


# sysctl -p
kernel.ctrl-alt-del = 1


Modifying kernel parameters by adding them to the /etc/sysctl.conf file not only sets them (sysctl -p), but also ensures the modified values persist after a server reboot.


Setting Kernel Parameters Persistently Under CentOS / RHEL 7


The approach to set kernel parameter under CentOS/RHEL 7 is a bit different than the older version. Create a new conf file under the /etc/sysctl.d/ directory. File names take the format /etc/sysctl.d/[name].conf. Files in the /etc/sysctl.d/ directory are parsed in order so it is recommended to prepend the file name with a number signifying the order you would like the files to be parsed in. For example, /etc/sysctl.d/01-custom.conf:

# cat /etc/sysctl.d/01-custom.conf
net.ipv4.ip_local_port_range="1025 65535"


To have the system immediately apply the values in a new/updated /etc/sysctl.d file, run sysctl -p [filename]:

# sysctl -p /etc/sysctl.d/01-custom.conf


Was this answer helpful? 0 Users Found This Useful (0 Votes)