内核高性能-熟悉内核性能相关的配置相关参数解析
目录
(1) Linux 各个用户文件打开数 /etc/security/limits.conf
(2)Linux 系统文件打开数 /proc/sys/fs/file-max
(4)测试机器配置 cat /etc/sysctl.conf |grep -v "#"
随着企业网站的访问量不断攀升,服务器所承受的压力也日益加剧。这种压力主要表现在以下几个方面:CPU 使用率持续高位运行,内存占用不断攀升,硬盘空间日趋紧张,以及网卡流量激增。为了应对这些挑战,我们有必要对服务器性能进行全面优化,以期在保持现有服务器数量的基础上,通过调整各环节参数实现更高效的运行。
具体而言,针对 CPU 使用率过高的问题,我们可以通过优化应用程序代码、减少不必要的计算任务以及合理分配线程等方式来降低 CPU 负载。对于内存占用问题,我们可以通过调整内存分配策略、清理无用的缓存数据以及优化内存使用效率等方法来减轻内存压力。
在硬盘方面,我们可以通过定期清理日志文件、压缩存储空间以及迁移部分数据至云存储等手段来释放硬盘空间。而对于网卡流量激增的问题,我们可以采取优化网络架构、启用负载均衡技术以及实施流量控制策略等措施来确保网络传输的稳定性和高效性。
总之,通过对服务器性能的调优,我们可以在不增加额外硬件成本的前提下,有效提升服务器的处理能力和响应速度,从而为企业网站提供更加稳定、高效的服务。
这里重点介绍几个常用通过调整linux 配置文件,通过调整单机性能,调整性能的配置文件及对应的配置项,通过修改这些配置项,以提高系统性能。
(1) Linux 各个用户文件打开数 /etc/security/limits.conf
$ cat /etc/security/limits.conf
app hard nofile 102401
app soft nofile 102400
app soft noproc 65534
app hard noproc 65535
mysql hard nproc 16
* soft core 102400
* hard core 102400
app soft nofile 262144
app hard nofile 262144
(2)Linux 系统文件打开数 /proc/sys/fs/file-max
cat /proc/sys/fs/file-max
1048576
(3) 内核主要配置文件 /etc/sysctl.conf
内核配置文件 /etc/sysctl.conf 是一个配置文件,用于存储在 Linux 系统中应用的内核参数设置。在该文件中,可以定义一些内核参数及其对应的值,以覆盖系统默认的参数设置。常见的一些内核参数包括:
kernel.sysrq: 通过设置为 1 或 0 来启用或禁用 Linux 内核的 SysRq 功能。
fs.file-max: 设置系统中文件句柄的最大数量。
kernel.pid_max: 设置系统中进程ID(PID)的最大值。
net.ipv4.ip_local_port_range: 设置系统中本地端口号的范围。
除了上述参数之外,还可以在 /etc/sysctl.conf 文件中定义其他许多内核参数,这些参数可根据需求进行调整和配置。修改 /etc/sysctl.conf 文件后,需要使用 sysctl 命令或重新启动系统来应用新的参数设置。
(4)某个样例测试机器配置
先看某业务测试机器配置及对应介绍
cat /etc/sysctl.conf |grep -v "#"
net.ipv4.ip_forward = 0 #启用或禁用 Linux 系统上的 IP 转发功能的配置。net.ipv4.ip_forward参数设置为1表示启用 IP 转发,允许 Linux 主机作为路由器转发网络流量。如果设置为0,则禁用 IP 转发功能。
net.ipv4.conf.default.rp_filter = 1 #用于设置 Linux 系统上默认网络接口的反向路径过滤器(Reverse Path Filtering,RP-Filter)的配置。net.ipv4.conf.default.rp_filter参数控制着在路由决策过程中使用的反向路径过滤规则。通常,它被设置为0或1,其中0表示禁用反向路径过滤,1表示启用反向路径过滤。
net.ipv4.conf.default.accept_source_route = 0 #设置 Linux 系统上默认网络接口是否接受源路由的配置。`net.ipv4.conf.default.accept_source_route`参数控制着是否接受来自其他主机的源路由报文。通常,它被设置为`0`或`1`,其中`0`表示禁止接受源路由报文,`1`表示允许接受源路由报文。
kernel.core_uses_pid = 1 #将进程ID(PID)包含在文件名中的配置。通过将kernel.core_uses_pid设置为1,可以确保核心转储文件名包含进程ID信息。这样做可以帮助在调试或分析期间更容易地识别特定进程的核心转储文件。
net.ipv4.tcp_syncookies = 1 # syncookies 设置解决高并发时, can not connect 问题。
kernel.msgmnb = 65536 #kernel.msgmnb参数设置了消息队列中单个消息的最大字节数
kernel.msgmax = 65536 #Linux 内核中消息队列的大小限制。而kernel.msgmax参数则设置了每个消息队列的最大字节数。在这里,它们都被设置为65536字节(64KB)。通过增加这些参数的值,可以增加消息队列的容量和能力。
net.ipv4.conf.all.promote_secondaries = 1 #net.ipv4.conf.all.promote_secondaries参数是用于控制 Linux 系统上的 IP 高级选项中是否将次要地址提升为主要地址的配置。当该参数设置为1时,次要地址将被提升为主要地址;当设置为0时,不会进行提升
net.ipv4.conf.default.promote_secondaries = 1 #net.ipv4.conf.default.promote_secondaries参数是用于控制 Linux 系统上默认网络接口中是否将次要地址提升为主要地址的配置。当该参数设置为1时,次要地址将被提升为主要地址;当设置为0时,不会进行提升。
net.ipv6.neigh.default.gc_thresh3 = 4096 #net.ipv6.neigh.default.gc_thresh3参数用于设置 Linux 系统中 IPv6 邻居缓存垃圾回收的阈值。阈值定义了当邻居缓存中的条目数量超过一定数量时启动垃圾回收的条件。具体而言,gc_thresh3是最高触发垃圾回收的阈值
net.ipv4.neigh.default.gc_thresh3 = 4096 #net.ipv4.neigh.default.gc_thresh3参数用于设置 Linux 系统中 IPv4 邻居缓存垃圾回收的阈值。阈值定义了当邻居缓存中的条目数量超过一定数量时启动垃圾回收的条件。具体而言,gc_thresh3是最高触发垃圾回收的阈值
kernel.softlockup_panic = 1 #kernel.softlockup_panic 参数是一个内核参数,用于控制 Linux 内核在检测到软锁死(soft lockup)时是否触发系统崩溃(panic)。软锁死是指内核中的一个进程或线程长时间未释放CPU资源,导致其他进程无法执行的情况。当该参数设置为1时,内核会在检测到软锁死时触发系统崩溃;当设置为0时,不会触发系统崩溃。
net.ipv6.conf.all.disable_ipv6=0 #net.ipv6.conf.all.disable_ipv6是一个网络配置参数,用于控制 Linux 系统中是否禁用 IPv6。当该参数设置为1时,禁用 IPv6;当设置为0时,启用 IPv6。
net.ipv6.conf.default.disable_ipv6=0 #net.ipv6.conf.default.disable_ipv6是一个网络配置参数,用于控制 Linux 系统中默认网络接口是否禁用 IPv6。当该参数设置为1时,禁用 IPv6;当设置为0时,启用 IPv6。
net.ipv6.conf.lo.disable_ipv6=0 #net.ipv6.conf.lo.disable_ipv6是一个网络配置参数,用于控制 Linux 系统中回环接口(lo)是否禁用 IPv6。当该参数设置为1时,禁用 IPv6;当设置为0时,启用 IPv6。
kernel.numa_balancing = 0 #禁用该功能可能会导致在某些具体情况下出现性能问题,但也可能提高特定工作负载的性能。效果取决于系统架构和应用程序的特性,因此在禁用或启用 NUMA 均衡之前,建议进行测试和评估。
kernel.shmmax = 68719476736 #kernel.shmmax是一个内核参数,用于设置 Linux 系统中共享内存段(shared memory segment)的最大大小。共享内存是一种在进程间共享数据的机制,可以提高进程间通信的效率。该参数指定了单个共享内存段的最大尺寸,以字节为单位。
kernel.printk = 5 #ernel.printk是一个内核参数,用于控制内核消息的打印级别。内核消息是指内核在运行过程中输出的各种信息、警告和错误。该参数可以设置为一个由8个数字组成的值,表示不同类型的消息的打印级别。每个数字分别对应于不同类型的消息级别,例如调试信息、普通信息、警告和错误等。通过修改该参数,可以控制内核消息的打印数量和详细程度。
kernel.sysrq = 1 #kernel.sysrq = 1 是一个内核参数,用于启用 Linux 内核的 SysRq 功能。SysRq(System Request)是一种特殊功能,允许在系统遇到问题时通过按下特定组合键来触发一些紧急命令,以便进行诊断和调试。将该参数设置为 1 可以启用 SysRq 功能,而设置为 0 则禁用该功能
fs.file-max = 2048578 #fs.file-max = 1048576 是一个内核参数,用于设置 Linux 系统中文件句柄的最大数量。文件句柄是操作系统用来跟踪和管理打开的文件或网络连接的数据结构。该参数指定了系统支持的最大文件句柄数量。可以通过修改内核启动参数或者使用 sysctl 命令来调整该参数的值
kernel.pid_max = 231074 # 是一个内核参数,用于设置 Linux 系统中进程ID(PID)的最大值。每个运行的进程在系统中都有一个唯一的PID。该参数指定了系统支持的最大PID值
net.ipv4.ip_local_port_range = 1024 65535 # ,用于设置 Linux 系统中本地端口号的范围。本地端口是用于网络通信的一种资源,它表示计算机上的应用程序可以使用的特定端口号范围。该参数指定了系统分配本地端口号的范围,最小值为1024,最大值为65535。
(5) /proc/sys 内核参数
/proc/sys 是一个特殊的文件系统,提供了对内核参数的访问。在 /proc/sys 目录下,可以找到一系列以目录形式组织的内核参数。每个目录对应一个参数分类,其中包含了一些可读写的文件,用于获取或修改对应参数的值。
/proc/sys 下的参数可以在运行时修改,但是如果应用重启,就会丢失,失效。 与 sysctl.conf 的区别是,后者修改参数,永久生效。
通常 /proc/sys 下的参数都有 在 sysctl.conf 中的对应项
$ cd /proc/sys
$ ll
total 0
dr-xr-xr-x 1 root root 0 Apr 22 15:53 abi
dr-xr-xr-x 1 root root 0 Apr 22 17:15 crypto
dr-xr-xr-x 1 root root 0 Apr 22 15:53 debug
dr-xr-xr-x 1 root root 0 Apr 22 15:53 dev
dr-xr-xr-x 1 root root 0 Apr 1 2021 fs
dr-xr-xr-x 1 root root 0 Apr 22 15:53 fscache
dr-xr-xr-x 1 root root 0 Apr 1 2021 kernel
dr-xr-xr-x 1 root root 0 Dec 15 11:24 net
dr-xr-xr-x 1 root root 0 Apr 22 15:53 sunrpc
dr-xr-xr-x 1 root root 0 Apr 22 15:53 vm
(6) 其他内核配置文件
除了 /proc/sys 和 /etc/sysctl.conf 这两个配置方式之外,Linux 还提供了下文件来动态调整和提高系统性能:
/sys: /sys 是一个虚拟文件系统,提供了对设备驱动程序和内核参数的访问。在 /sys 目录下,可以找到各种设备和内核子系统的目录和文件。例如,可以通过 /sys/devices 目录来访问设备相关的参数。
/etc/default/: 该目录包含了一些默认的系统服务配置文件,如 /etc/default/grub 用于 GRUB 引导加载程序的设置。
/etc/modprobe.d/: 在这个目录下,可以创建以 .conf 结尾的文件来配置模块加载器(modprobe)的行为。这些文件用于管理内核模块的加载和参数设置。
/etc/security/limits.conf: 该文件用于配置系统中进程资源限制,如最大打开文件数、最大进程数等。通过调整这些限制,可以优化系统的性能和安全性。
这些文件提供了灵活的配置选项,允许用户根据需求动态地调整系统性能和行为。
(7) 总结
内核里面还有其他的参数设置,后面学习到的时候再分析。
免责声明,上述变量配置值,只面向与学习参考,生产环境值的具体确定,需要视用户真实环境压测数据调整。