拓冰建站拓冰建站
首页 / 资讯中心 / 正文

揭秘Linux内核参数:性能问题根源与优化实战

你有没有碰到过, 服务器运转一阵子后, 性能急剧下降、连接个数莫名其妙被耗尽、应用频繁出现内存溢出等奇怪问题, 很多情况下, 根源隐匿于Linux内核的某一个参数之中。一、怎么会需要去明白内核参数呢? 不清楚诸位有没有碰到过这个样子的状况:为何nginx进行配置时, 其连接上限确定为了 511 , 然在高并发状况下, 却仍旧存在许多连接遭遇被拒绝的情况呢?为什么内存还很充足系统就开始用swap导致性能骤降短连接服务运行了一段时间之后, 为什么会报出“端口耗尽”, 进而无法去建立新的连接呢?那些问题的答案, 全都隐匿于Linux内核参数之中。就在今天, 我会依据实际情形去讲讲那些运维必定得知晓的内核“开关”。二、内核中网络相关参数1. 半连接队列net.ipv4.作用 控制tcp半连接队列的最大长度适用的场景是, 服务器遭受了 syn flood 攻击, 或者在正常处于高并发的情况下, 有大量的连接滞留在了某状态 , 对吧。典型症状 运行以下指令, 数值一直居高不下, 普通用户连接超时, 建立连接失败。netstat -ant | grep SYN_RECV | wc -l如何设置 #查看当前cat /proc/sys/net/ipv4/tcp_max_syn_backlog#临时调整重启失效echo 2048 /proc/sys/net/ipv4/tcp_max_syn_backlog#永久生效echonet.ipv4.tcp_max_syn_backlog 2048 /etc/sysctl.confsysctl -p通常情形下, 此参数需跟 net.core. 一同运用, 提议设置成大约 的两倍。2. 全连接队列net.core.作用是, 对tcp已完成三次握手的全连接队列最大长度予以控制, 它属于线上极易踩坑这类情况, 还是内核参数当中的一个。默认值 128对高并发的web服务器来说严重偏小典型症状 #增大到65535echo 65535 /proc/sys/net/core/somaxconnRecv-Q 已建立连接但尚未被应用层 取走的数量。3. time-wait复用net.ipv4.作用是, 复用处于 time - wait 状态的, 以此来解决短连接端口耗尽的问题。其所适用的场景为, api网关, 以及反向代理, 还有微服务短连接架构, 会产生数量众多的time - wait连接。症状 netstat -ant | grep TIME_WAIT | wc -l客户端出现这种在使用中的报错情况, 是因为数量达到了几千, 甚至达到了上万, 致使服务器本地端口被耗尽。配置要求一定要同时将时间戳开启, 全新的内核要彻底把它废弃掉, 绝对禁止再继续使用它。#需要同时开启tcp_timestampsecho 1 /proc/sys/net/ipv4/tcp_timestampsecho 1 /proc/sys/net/ipv4/tcp_tw_reuse三、内存篇OOM与性能的平衡术 4. 交换倾向vm.最大的误区 以为设为0就是最好的作用 控制内核使用swap的倾向程度0-100核心真相 业务方面的建议数值, 具体而言, 需要开发人员依据业务的实际状况来予以确定, 这是默认的推荐数值:#查看当前值cat /proc/sys/vm/swappiness#数据库服务器建议echo 10 /proc/sys/vm/swappiness5. 内存分配策略vm.三种模式的通俗解释0默认 启发式检查1总是允许 2严格检查 redis的推荐配置 echo 1 /proc/sys/vm/overcommit_memory普通的业务java程序保存默认0即可。6. 脏页控制vm. 和 vm.io先搞清楚两个概念 两个参数的区别 vm.io 比如10%vm. 比如20%典型问题 在数据库进行大批量更新之际, 以及消息队列写入之时, 业务忽然毫无征兆地卡顿了长达十几秒, 然而磁盘IO的数值却并非处于高位, 究其实际情况从 root 查找原因就是触发了同步刷脏阈值, 就这一情况造成业务卡顿。写密集业务优化建议 #降低阈值早点开始刷echo 5 /proc/sys/vm/dirty_background_ratioecho 10 /proc/sys/vm/dirty_ratio四、文件篇磁盘IO的优化开关7. 文件句柄数fs.file-max有着这样一种情况, 即呈现出 “Too many open files” 这般的症状表现, 而此情况属于我们运维日常当中高频出现的故障里面的其中一个。系统级限制予以修改, 用户级限制也需修改, 并且用户级限制的优先级是更高的。1. 系统级限制 #查看当前限制cat /proc/sys/fs/file-max# 增加限制echo 1000000 /proc/sys/fs/file-max2. 用户级限制这个更重要一般就修改这个
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门