对于业务系统在Linux完成部署后,很多小伙伴采用系统默认配置,直接投产使用。其实,我们还可以针对内核进行深度优化,充分发挥Linux性能,让服务器响应更为快速。本文详细介绍Linux性能优化步骤。
一、用户级/系统最大文件句柄
文件句柄(File Handle):是Linux给进程打开的对象(文件、设备、sockect等)分配一个ID编号,可用于内核快速寻址、进程间相互通信,提升Linux性能处理效率。系统默认为1024,这个设置在高并发场景会出现too many open files。造成系统内存资源很大,但业务系统总是卡死的问题。
用户级:
(1)修改/etc/security/limits.conf配置
(2)修改内容如下:
注: *代表是所有普通用户,nofile是最大文件句柄数,nproc为最大进程数,soft和hard代表软硬限制,数值代表设置值
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
root soft nofile 65535
root hard nofile 65535
系统级:
(1)修改/etc/sysctl.conf配置
(2)修改内容如下:
fs.file-max = 655350系统最大打开文件数,这个数要为单进程的2倍及以上,建议采用10倍。
kernel.pid_max=65535 表示本机可以跑多少个进程,系统默认是32768,偏少。
fs.inotify.max_user_instances = 8192单用户可创建inotify监控实例
fs.inotify.max_user_watches = 524288用户可以同时监控文件数
生效配置:sysctl -p
二、网络高并发内核优化
网络传输层主要是TCP、UDP两种协议栈,现网80%业务采用TCP。本文针对TCP进行内核优化。
(1)编辑/etc/sysctl.conf文件
(2)填写如下内容到文件里面:
net.ipv4.ip_local_port_range = 1024 65535设置端口的可用范围
net.ipv4.tcp_tw_reuse = 1允许新连接复用TIME_WAIT端口,避免出现端口耗尽问题
net.ipv4.tcp_tw_recycle = 0关闭TIME_WAIT快速回收
net.ipv4.tcp_max_tw_buckets = 50000防止TIME_WAIT占满服务器端口和内存
net.ipv4.tcp_syncookies = 1开启防护SYN缓存防攻击
net.ipv4.ip_forward = 1开启路由转发,在docker场景、NAT场景使用。
三、内存内核优化
为了防止OOM、脏页问题,需要对内存内核进行优化,提升内核响应速度。
(1)编辑/etc/sysctl.conf文件
(2)填写如下内容到文件里面:
vm.swappiness = 10设置SWAP交换分区倾向,范围0-100,本文设置为10,尽量不使用交换内存。
vm.dirty_ratio = 20数据写入内存,但是还没刷到硬盘。在脏页达到总内存20%会强制刷入硬盘。
vm.dirty_background_ratio = 10脏页达到总内存10%主动刷入硬盘,不阻塞业务。
vm.dirty_expire_centisecs = 3000脏页在内存>30s进行落盘
vm.dirty_writeback_centisecs = 500每隔5s进行脏页查询
vm.overcommit_memory = 1允许内存超分,数据库、redis场景应用,避免服务启动失败。
vm.overcommit_ratio = 80物理内存给内核预留20%,应用可用80%
vm.nr_hugepages = 2 设置大页内存,固定内存不被置换。数值以内存数据为准。
四、内核安全防控
提升内核层面安全,需要各类安全风险。最近的Dirty Frag漏洞、copyfail漏洞都通过提权获取root权限。
(1)编辑/etc/sysctl.conf文件
(2)填写如下内容到文件里面:
kernel.kptr_restrict = 2禁止内核暴漏内存地址,防止提权利用
# 禁止接收ICMP重定向报文,防止路由篡改
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 忽略广播ARP、禁止ARP欺骗
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.icmp_echo_ignore_broadcasts = 1禁止响应广播ping,防止内网扫描、DDOS放大
net.ipv4.icmp_ignore_bogus_error_responses = 1 忽略错误ICMP报文,防畸形包攻击
【总结】
恭喜你成功掌握高性能内核优化策略,评论区有文章总结!觉得好可以关注、点赞、推荐、转发,谢谢!