1. 题记
有关Linux关键内核参数的调整,我前面的调优文章其实就有涉及到,只是比较零散,本篇集中深入介绍Linux常用关键内核参数及其调优,Linux调优80%以上都涉及到内核的这些参数的调整。
2. 文件系统相关参数
- fs.file-max
参数说明::控制系统中打开文件描述符的数量上限。
默认值:通常为65535。
优化建议:对于高负载服务器,可以增加此限制,以防止文件句柄耗尽的问题。例如,可以设置为6553560。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - fs.nr_open
参数说明::定义了每个进程可以打开的文件描述符的最大数量。
优化建议:可以根据具体需求进行调整,尤其是对于需要打开大量文件的应用程序。例如,可以设置为1048576。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - 优化建议:
根据系统的负载和应用需求,适当增加这2个参数的值。对于高并发的服务器应用,可能需要将其设置为一个较大的数值,以避免出现 "Too many open files" 错误。
可以通过编辑 /etc/sysctl.conf 文件来修改这个参数,例如:fs.file-max = 655360。修改后需要执行 sysctl -p 命令使更改生效。
3. 内存管理参数
- 物理内存大小
查看:通过/proc/meminfo文件查看系统的总内存和可用内存。
设置:使用sysctl命令设置物理内存大小(实际上,直接设置物理内存大小通常不是由用户进行的,这里主要是为了展示如何使用sysctl命令设置参数)。例如,要将物理内存大小相关的某个参数(注意,并非直接设置物理内存总量)进行调整,可以使用类似sudo sysctl -w vm.some_memory_parameter=value的命令(这里的vm.some_memory_parameter和value需要替换为实际的参数名和值)。 - 虚拟内存大小(swappiness)
查看:通过/proc/sys/vm/swappiness文件查看系统的交换分区比例。
优化建议:降低vm.swappiness值可以减少系统对交换分区的使用,提升性能。对于需要高性能的应用服务器,可以设置为10或更低。
例如:sudo sysctl -w vm.swappiness=10(或修改/etc/sysctl.conf文件并重启系统以永久生效)。 - 内存缓存(cache)大小
调整:虽然不能直接设置内存缓存的具体大小,但可以通过调整相关参数来影响缓存的行为。例如,vm.vfs_cache_pressure参数可以控制内核回收inode和dentry缓存的倾向。
优化建议:对于需要频繁访问文件系统的应用,可以适当降低vm.vfs_cache_pressure的值以减少缓存回收。
4. 进程管理参数
- 最大进程数
查看:通过/proc/sys/kernel/pid_max文件查看系统的进程最大数量。
设置:使用sysctl命令设置最大进程数。
优化建议:对于需要启动大量进程的服务器,可以增加此值。
例:sudo sysctl -w kernel.pid_max=100000(或修改/etc/sysctl.conf文件并重启系统以永久生效)。 - 文件描述符限制
查看:通过/proc/sys/fs/file-max文件查看系统的文件描述符最大数量。
设置:使用sysctl命令或ulimit命令设置文件描述符限制。
优化建议:增加文件描述符限制有助于服务器在高并发连接情况下保持稳定。
例:sudo sysctl -w fs.file-max=1000000(或修改/etc/sysctl.conf文件并重启系统以永久生效),或使用ulimit -n 65536临时设置当前会话的文件描述符限制。 - kernel.pid_max
参数说明:控制系统中可以同时存在的进程数量的上限。
默认值:32768。
优化建议:对于需要启动大量进程的系统中,可以增加此值。例如,可以设置为4194303。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - kernel.threads-max
参数说明:定义了系统中进程数量(包括线程)的最大值。
优化建议:对于多线程应用程序,适当增加此值以支持更多的线程。例如,可以设置为2097152。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
5. 内存管理参数
- vm.swappiness
参数说明:
这个参数控制内核将内存页换出到交换分区的倾向程度。取值范围从 0 到 100,值越低表示内核越倾向于保留内存中的页,而不是将其换出到交换分区。
优化建议:
对于具有足够物理内存的服务器,通常可以将这个参数设置为一个较低的值,如 vm.swappiness = 10。这样可以减少对交换分区的使用,提高系统性能。 - vm.overcommit_memory
参数说明:
控制内存分配的策略。有三个取值:0(默认)表示内核在分配内存时进行谨慎的检查,确保不会过度分配导致系统内存不足;1 表示内核允许过度分配内存;2 表示内核严格按照系统的交换空间大小来限制内存分配。
优化建议:
对于某些需要大量内存分配的应用,可以考虑将这个参数设置为 1,以允许内核过度分配内存。但这也可能导致系统在内存不足时出现不稳定的情况,需要谨慎使用。在 /etc/sysctl.conf 中添加:vm.overcommit_memory = 1。 - vm.max_map_count
参数说明:控制单个进程可以拥有的内存映射区域的最大数量。
默认值:65536。
优化建议:增加此值可以允许更多的内存映射,适用于需要大量内存映射的应用。例如,可以设置为262144。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - vm.swappiness
参数说明:控制系统使用交换空间的倾向。值越高,系统越倾向于使用交换空间。
默认值:60。
优化建议:对于需要高性能的应用服务器,可以设置为10或更低,以减少交换的频率,提升系统性能。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - vm.dirty_ratio和vm.dirty_background_ratio
参数说明:这两个参数控制内核回写脏(已修改但尚未写入磁盘)页的阈值。
优化建议:适当调整这两个参数可以优化磁盘I/O性能。例如,可以将vm.dirty_ratio设置为15,将vm.dirty_background_ratio设置为5。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
6. 网络相关参数
- net.ipv4.tcp_max_tw_buckets
参数说明:控制系统中TIME_WAIT套接字的最大数量。
优化建议:增加该值可以减少TIME_WAIT套接字的数量,适用于高并发的服务器。例如,可以设置为5000。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - net.ipv4.tcp_tw_reuse和net.ipv4.tcp_tw_recycle
参数说明:这两个参数控制TCP TIME-WAIT快速重用。
优化建议:开启这些参数可以允许快速重用TIME_WAIT状态的连接,提高连接重用率。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件,将值设置为1。 - net.ipv4.tcp_fin_timeout和net.ipv4.tcp_keepalive_time
参数说明:分别控制TCP连接的关闭时限和空闲超时时间。
优化建议:适当减少这些时间可以加快资源的回收。例如,可以将tcp_fin_timeout设置为10,将tcp_keepalive_time设置为150。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - net.ipv4.ip_local_port_range
参数说明:定义UDP和TCP连接的本地端口的取值范围。
优化建议:扩大端口范围以支持更多的并发连接。例如,可以设置为"1024 65000"。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - tcp_tw_reuse 和 tcp_tw_recycle
参数说明:
tcp_tw_reuse 允许将 TIME_WAIT 状态的套接字重新用于新的连接。
tcp_tw_recycle 快速回收 TIME_WAIT 状态的连接。
优化建议:
在高并发的服务器环境中,可以考虑启用这两个参数以提高 TCP 连接的复用率,减少 TIME_WAIT 状态的连接数量。但在某些网络环境下,启用 tcp_tw_recycle 可能会导致连接问题,因此需要谨慎使用。
在 /etc/sysctl.conf 中添加:net.ipv4.tcp_tw_reuse = 1 和 net.ipv4.tcp_tw_recycle = 1。 - tcp_max_syn_backlog
参数说明:
定义了 TCP 连接请求队列的最大长度。当服务器收到大量的连接请求时,这些请求会在队列中等待被处理。
优化建议:
如果服务器面临大量的并发连接请求,可以适当增加这个参数的值。例如,对于高并发的 Web 服务器,可以将其设置为一个较大的数值,如 tcp_max_syn_backlog = 8192。
7. 磁盘 I/O 参数
- vm.dirty_background_ratio 和 vm.dirty_ratio
参数说明:
vm.dirty_background_ratio 定义了系统内存中可以被内核的后台进程异步写入磁盘的脏页比例。
vm.dirty_ratio 定义了系统内存中可以被进程主动写入磁盘的脏页比例。
优化建议:
根据系统的磁盘写入性能和内存大小,调整这两个参数的值。如果系统的磁盘写入速度较快,可以适当增加这两个参数的值,以减少磁盘写入的频率,提高系统性能。例如,vm.dirty_background_ratio = 5 和 vm.dirty_ratio = 10。 - elevator
参数说明:
这个参数指定了磁盘 I/O 调度算法。常见的调度算法有 CFQ(完全公平队列)、Deadline(截止时间调度)和 NOOP(简单调度)。
优化建议:
不同的调度算法适用于不同的工作负载。例如,对于数据库服务器等对 I/O 响应时间要求较高的应用,可以考虑使用 Deadline 调度算法。可以通过在 /etc/grub.conf 文件中添加 elevator=deadline 来更改调度算法。
8. 其他参数
- kernel.msgmnb、kernel.msgmax和kernel.msgmni
参数说明:分别控制消息队列的最大长度、单个消息的最大长度和系统中同时运行的消息队列的个数。
优化建议:根据具体需求调整这些参数,以优化消息队列的性能。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。 - kernel.shmmax和kernel.shmall
参数说明:分别控制单个共享内存段的最大值和系统上可以使用的共享内存的总量。
优化建议:在需要大量共享内存的应用中,如数据库服务器,适当增加这些值。
设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
注:Linux内核参数有很多,以上介绍的是常用而且关键的。
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。