linux系统内核参数优化(Linux 系统优化的一些建议内核优化)
linux系统内核参数优化
Linux 系统优化的一些建议内核优化关闭swap
如果服务器上有运行数据库服务或消息中间件服务,请关闭交换分区
echo "vm.swappiness = 0" >> /etc/sysctl.conf sysctl -p
OOM Killer
一般我们的linux服务都是混部服务的,每个程序申请的物理内存都是共享的;例如物理内存只有1g,启动2个程序各申请1g是可以的,linux通过这种过度分配的方式来达到内存的充分利用,当程序实际使用内存超出物理内存时,会被系统按照优先级,杀掉一部分程序以确保其它程序的正常运行;为了避免核心服务被杀,可以将进程文件设置为最高优先级。
# 数值越小越不容易被杀 echo -17 > /proc/$pid/oom_score_adj
TCP
因为我们提供的数据库和一些消息中间件服务都是内网工作的,所以可以针对内网对TCP参数进行一些优化。
- net.ipv4.tcp_syn_retries
默认值为6,参考值为2。主机作为客户端,对外发起TCP连接时,即三次握手的第一步,内核发送SYN报文的重试次数,超过这个次数后放弃连接。内网环境通信良好,因此可以适度降低此值
- net.ipv4.tcp_synack_retries
默认值为5,参考值为2。主机作为服务端,接受TCP连接时,在三次握手的第二步,向客户端发送SYN+ACK报文的重试次数,超过这个次数后放弃连接。内网环境中可适度降低此值
- net.ipv4.tcp_timestamps
是否开启时间戳,开启后可以更精确地计算RTT,一些其他特性也依赖时间戳字段。
- net.ipv4.tcp_tw_reuse
默认值为0,建议值为1。是否允许将处于TIME_WAIT状态的socket用于新的TCP连接。这对于降低TIME_WAIT数量很有效。该参数只有在开启tcp_timestamps的情况下才会生效。
- net.ipv4.tcp_tw_recycle
是否开启TIME_WAIT套接字的快速回收,这是比tcp_tw_reuse更激进的一种方式,它同样依赖tcp_timestamps选项。强烈建议不要开启tcp_tw_recycle,原因有两点,一是TIME_WAIT是十分必要的状态,避免关闭中的连接与新建连接之间的数据混淆,二是tcp_tw_recycle选项在NAT环境下会导致一些新建连接被拒绝,因为NAT下每个主机存在时差,这体现在套接字中的时间戳字段,服务端会发现某个IP上的本应递增的时间戳出现降低的情况,时间戳相对降低的报文将被丢弃
- net.core.somaxconn
默认值为128,参考值为2048。定义了系统中每一个端口上最大的监听队列的长度。当服务端监听了某个端口时,操作系统内部完成对客户端连接请求的三次握手。这些已建立的连接存储在一个队列中,等待accept调用取走。本选项就是定义这个队列的长度。调大该值,可降低高并发场景下服务端的reject次数。
- net.ipv4.tcp_max_syn_backlog
客户端的请求在服务端由两个队列进行管理,一种是与客户端完成连接建立后,等待accept的放到一个队列,这个队列的长度由somaxconn参数控制;另一种是正在建立但未完成的连接单独存放一个队列,这个队列的长度由tcp_max_syn_backlog控制;默认128,调到至8192.
- net.ipv4.tcp_max_tw_buckets
默认值为4096,参考值为100000。定义系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数,则TIME_WAIT套接字将立刻被清除并打印警告信息。如果系统被TIME_WAIT过多问题困扰,则可以调节tcp_max_tw_buckets、tcp_tw_reuse、tcp_timestamps三个选项来缓解。TIME_WAIT状态产生在TCP会话关闭时主动关闭的一端,如果想从根本上解决问题,则让客户端主动关闭连接,而非服务端。
page cache
page cache即系统脏页,是系统的io缓存,当数据写入磁盘前会先写入page cache中,然后异步刷入磁盘;写缓存可以提升IO的访问速度,但同时也会增加丢失数据的风险。
从page cache刷到磁盘有以下三种时机:
- 可用物理内存低于特定阈值时,为了给系统腾出空闲内存;
- 脏页驻留时间超过特定阈值时,为了避免脏页无限期驻留内存;
- 被用户的sync()或fsync()触发。
由系统执行的刷盘有两种写入策略:
- 异步执行刷盘,不阻塞用户I/O;
- 同步执行刷盘,用户I/O被阻塞,直到脏页低于某个阈值。
在一般情况下,系统先执行第一种策略,当脏页数据量过大,异步执行来不及完成刷盘时,切换到同步方式。
我们可以通过内核参数调整脏数据的刷盘阈值:
- vm.dirty_background_ratio,默认值为10。该参数定义了一个百分比。当内存中的脏数据超过这个百分比后,系统使用异步方式刷盘。
- vm.dirty_ratio,默认值为30。同样定义了一个百分比,当内存中的脏数据超过这个百分比后,系统使用同步方式刷盘,写请求被阻塞,直到脏数据低于dirty_ratio。如果还高于dirty_background_ratio,则切换到异步方式刷盘。因此 dirty_ratio 应高于dirty_background_ratio。
除了通过百分比控制,还可以指定过期时间:vm.dirty_expire_centisecs,默认值为3000(30秒),单位为百分之1秒,超过这个时间后,脏数据被异步刷盘。
可以通过下面的命令查看系统当前的脏页数量:
cat /proc/vmstat |egrep "dirty|writeback" nr_dirty 951 nr_writeback 0 nr_writeback_temp 0 #输出显示有951个脏页等待写到磁盘。默认情况下每页大小为4KB。另外,也可以在/proc/meminfo文件中看到这些信息。
如果数据安全性要求没有那么高,想要多“cache”一些数据,让读取更容易命中cache,则可以增加脏数据占比和过期时间:
vm.dirty_background_ratio = 30 vm.dirty_ratio = 60 vm.dirty_expire_centisecs = 6000
同理,如果不希望因为刷盘导致io被阻,可适当减少异步刷盘的数值,这样可以让io更加平滑:
vm.dirty_background_ratio = 5 vm.dirty_ratio = 60
以上就是Linux 系统优化的一些建议(内核优化)的详细内容,更多关于Linux 系统优化的资料请关注开心学习网其它相关文章!
- linuxrabbitmq安装和使用教程(用docker部署RabbitMQ环境的详细介绍)
- linux系统各种执行命令(Linux调整命令历史方法详解)
- dedecms官方安装手册(Linux下安装DedeCMS及安全设置教程)
- linux怎么设置php代码(linux Cron定时执行带参数的PHP代码)
- amazonawslinux服务器设置(如何在AWS EC2的Linux服务器上开放一个端口)
- linuxmysql客户端搭建(一台linux主机启动多个MySQL数据库的方法)
- linux查看磁盘空间异常占用(Linux磁盘空间释放问题整理)
- linux下date用法(Linux date命令的使用)
- linux中ceph的状态(Wdcp linux控制面板配置多PHP版本记录)
- springcloud alibaba nacos linux配置的详细教程(springcloud alibaba nacos linux配置的详细教程)
- nginx安全配置提示(wdcp Linux面板nginx启用gzip后js未压缩解决方案)
- linux双网卡热备配置超详细(linux 使用bond实现双网卡绑定单个IP的示例代码)
- linux后台运行程序的命令(在后台运行Linux命令的方法)
- 怎么查询linux的selinux状态(如何理解Linux下的SELinux)
- 宝塔linux面板php7.0安装不上(宝塔面板php.ini文件在哪里找)
- linux安装phpstudy(PHPStudy下如何为Apache安装SSL证书的方法步骤)
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
- 全椒人,38年集体回忆 1980-2018 ,看完不要哭(全椒人38年集体回忆)
热门推荐
- 宝塔面板必须安装哪些软件(宝塔面板安装后必要的安全设置说明)
- mysql索引b+树和b树(MySQL使用B+Tree当索引的优势有哪些)
- VS不生成.vhost.exe和.pdb文件
- mysql怎么看脱机数据(MYSQL电话号码,身份证数据脱敏的实现)
- linux输入命令ifconfig(Linux ifconfig 命令的使用)
- node.js怎么使用import(Node.js断点续传的实现)
- python大数据学习顺序(Python如何处理大数据?3个技巧效率提升攻略推荐)
- docker容器的创建启动和停止操作(docker版es、milvus、minio启动命令详解)
- SQL中Union,Intersect,Except
- kubernetes最优pod数(详解kubernetes pod的编排和生命周期)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9