当前位置: 首页 > news >正文

使用sysctl调优Linux内核

概述

Linux内核包含了大约1000个可调节的参数。这些参数的默认取值适合于一般的使用场景,这也意味着它们并非对每个人都是十全十美的。

  • sysctl命令适用于所有的Linux系统。你必须以root的身份才能修改内核参数。

  • 该命令可以立刻改变参数值,但除非将参数定义在/etc/sysctl.conf中,否则重启之后,修改过的值又会恢复原样。

  • 最好是在修改sysctl.conf之前先进行测试。如果将错误的值写入/etc/sysctl.conf,会导致系统无法启动。

实战

sysctl支持下列选项。
❏ -a:输出所有的参数。
❏ -p FILENAME:从FILENAME中读入值。默认从/etc/sysctl.conf中读取。
❏ PARAM:输出PARAM的当前值。
❏ PARAM=NEWVAL:设置PARAM的值。

1.任务调度器调优

任务调度器是针对桌面环境优化的,在这种环境下,快速响应用户操作要比整体效率更重要。延长任务的切换间隔能够提高服务器系统的性能。查看kernel.sched_migration_cost_ns的值:
在这里插入图片描述
kernel.sched_migration_cost_ns(在比较旧的内核中是kernel.sched_migration n_cost)控制着任务在被切换之前能够保持活跃状态的时长。在拥有着大量任务或线程的系统中,这会导致大量的开销耗费在上下文切换上。默认值500000纳秒对于运行Postgres或Apache服务器的系统无疑是过小了。建议将这个值修改为5微秒:

sysctl kernel.sched_migration_cost_ns=5000000

Postgres服务器取消参数sched_autogroup_enabled的设置能够提高性能。

2.网络调优

对于需要执行大量网络操作的系统(NFS客户端、NFS服务器等)而言,网络缓存的默认值可能过小了。
检查读缓存的最大值:

[root@meta /etc/prometheus/targets]#sysctl net.core.rmem_max
net.core.rmem_max = 4194304

增加缓存大小:

        # sysctlnet.core.rmem_max=16777216        
        # sysctlnet.core.wmem_max=16777216        
        # sysctl net.ipv4.tcp_rmem="40968738016777216"        
        # sysctl net.ipv4.tcp_wmem="40966553616777216"        
        # sysctl net.ipv4.tcp_max_syn_backlog=4096

原理

sysctl命令可以直接访问内核参数。在大多数发行版中,这些参数默认都是针对普通工作站优化的。如果系统内存容量大,可以增加缓冲区的值来提高性能;如果内存不足,可以减少缓存区的值。如果系统作为服务器,可以将任务切换间隔值设置的比单用户工作站长一些。

相关文章:

  • charles劫持修改js文件
  • 机房服务器远程维护解决方案,解决机房安全问题刚刚好
  • 俄罗斯考虑购买700亿美元的“友好”国家外汇
  • 22牛客多校4 - Task Computing(相邻贪心,推式子倒序DP)
  • LLVM学习入门(2):实现解析器 Parser 和语法树 AST
  • Spring Cloud项目(七)——使用sentinel作为熔断降级
  • 轻量应用服务器vs云服务器:区别在哪?
  • javascript中BOM对象
  • android的本地通讯录获取以及RecyclerView展示
  • 大学生任务app软件开发功能介绍
  • 3天精通Postman---动态参数amp;断言amp;CSV数据驱动amp;Mock Server
  • 【面试题】线程池
  • 大学生手机兼职小程序APP开发
  • 20 C++设计模式之迭代器(Iterator)模式
  • Redis自动过期机制之key的过期监听
  • [译]CSS 居中(Center)方法大合集
  • 08.Android之View事件问题
  • 2017-09-12 前端日报
  • ES2017异步函数现已正式可用
  • ES6简单总结(搭配简单的讲解和小案例)
  • export和import的用法总结
  • Git 使用集
  • java小心机(3)| 浅析finalize()
  • php的插入排序,通过双层for循环
  • Python学习之路16-使用API
  • React的组件模式
  • 从setTimeout-setInterval看JS线程
  • 给github项目添加CI badge
  • 工程优化暨babel升级小记
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 面试总结JavaScript篇
  • 批量截取pdf文件
  • 入手阿里云新服务器的部署NODE
  • 用mpvue开发微信小程序
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ###C语言程序设计-----C语言学习(3)#
  • #14vue3生成表单并跳转到外部地址的方式
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (LeetCode C++)盛最多水的容器
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (solr系列:一)使用tomcat部署solr服务
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)详解PHP处理密码的几种方式
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net IE10 _doPostBack 未定义
  • .NET Standard 的管理策略