通过 ulimit 和 sysctl 调整Linux系统性能
目录
- 一:资源限制管理工具:ulimit
- 1、ulimit 作用介绍
- 2、ulimit 常用选项
- 3、ulimit 配置文件
- 二:内核参数调整工具:sysctl
- 1、sysctl 作用介绍
- 2、sysctl 常用选项
- 3、sysctl 配置文件
一:资源限制管理工具:ulimit
1、ulimit 作用介绍
ulimit 是为用户设定资源限制的工具。 它限制的是用户会话中所有进程的资源使用,而不仅仅是某个单独的进程。通过限制某个用户进程的资源来保该用户的进程不会消耗过多的系统资源。
-
限制以某个用户身份运行的单个进程可以打开的文件数量。
-
限制某个用户可以创建的最大进程数。
-
限制以某个用户身份运行的单个进程可以使用的堆栈大小。
-
限制以某个用户身份运行的单个进程可以使用的最大虚拟内存量。
-
限制以某个用户身份运行的单个进程可以使用的最大 CPU 时间。
2、ulimit 常用选项
ulimit -a
- 显示当前用户的所有资源限制信息。
ulimit -n
- 如果 不加数字,表示 查看当前用户单个进程可以打开的最大文件数量。
- 如果 加数字,表示 设置 当前用户单个进程可以打开的文件描述符的最大数量。
ulimit -u
- 如果 不加数字,表示 查看当前用户可以创建的最大进程数。
- 如果 加数字,表示 修改最大进程数。
ulimit -s
- 如果 不加数字,表示 查看当前用户的堆栈大小。
- 如果 加数字,表示 设置堆栈大小。
ulimit -l
- 如果 不加数字,表示 查看当前用户最大可锁定的内存大小。
- 如果 加数字,表示 修改最大可锁定内存大小。
ulimit -t
- 如果 不加数字,表示 查看当前用户进程的最大 CPU 时间。
- 如果 加数字,表示 设置进程的最大 CPU 时间(单位:秒)。
通过 ulimit 命令修改资源限制信息:
-
只能修改执行ulimit这个命令的用户的资源限制信息,不能修改其他用户的资源限制信息;
-
临时生效,该会话结束后,恢复默认值
3、ulimit 配置文件
配置文件名称:/etc/security/limits.conf
配置文件格式:
用户名 限制类型 资源类型 给定的资源值
# 用户名
# 如果为 * 就表示针对所有用户生效
# @groupname:表示特定的用户组
#
# 限制类型
# soft:软限制,用户可以在不超出硬限制的情况下,通过命令修改软限制值。
# hard:硬限制,只能由 root 用户 或具有足够权限的用户修改配置文件实现。
# -:无类型,包含软限制和硬限制
# 限制的资源类型
# core:core控制的是操作系统生成的文件大小,这个文件是用来排错的;
# nproc:控制最大进程数。
# nofile:控制最大打开文件数。
# memlock:控制最大内存锁定大小。
# msgqueue:控制最大消息队列大小。
# 给定的资源值
# unlimited:表示无限制
# 数字:表示不能超过这个数字指定值
通过 编辑配置文件修改资源限制信息:
-
需要管理员身份的用户(root)编辑配置文件,可以修改其他用户的资源限制信息;
-
永久生效,开机会自动加载这个配置文件;
二:内核参数调整工具:sysctl
1、sysctl 作用介绍
sysctl 可以用来修改Linux内核的一些参数,从而实现性能优化。sysctl 主要用于查询和修改 /proc/sys
目录下的内核参数,使用sysctl调整的内核参数也是临时生效。
可以通过写入配置文件( /etc/sysctl.conf
)的方式来实现持久化生效。
2、sysctl 常用选项
sysctl -w key=value
:临时改变某个指定参数的值
例如:临时开启网络转发
sysctl -w net.ipv4.ip_forward=1
sysctl -a
:显示所有生效的系统参数
sysctl -p [filename]
:修改配置文件后,加载生效(没有指定具体文件系统首先会读取 /etc/sysctl.conf 文件中的设置)
通过sysctl修改的内核参数只会临时生效,系统重启后修改的参数会恢复到初始值;
3、sysctl 配置文件
配置文件格式:
-
每一行是一个 键值对,其中
key
是内核参数名称,value
是该参数的值。两者之间用 等号(=) 分隔。 -
键名所表示的路径,是
/proc/sys
目录中的 配置项路径,以/proc/sys
为起点,其中斜线用点表示。net.ipv4.ip_forward
对应的文件是/proc/sys/net/ipv4/ip_forward
sysctl 常用配置:
# 设置较低的交换空间使用倾向
vm.swappiness = 0
# 开启网络转发功能
net.ipv4.ip_forward=1
# 禁ICMP回应报文(禁ping)
net.ipv4.icmp_echo_ignore_all=1
通过将相关内核参数写入配置文件,系统重启后仍然会生效;