linux的vm相关参数介绍_sysctl查看vm参数-程序员宅基地

技术标签: tcp  io  linux  磁盘  linux内核  socket  LINUX Management  

author:skate
time:2010/04/13

 


 

linux的vm相关参数介绍


1. 保证linux有足够的物理内存,可以调整vm的如下参数

 

vm.min_free_kbytes=409600;//默认值是3797,保证物理内存有足够空闲空间,防止突发性换页


vm.vfs_cache_pressure=200;//默认是100,增大这个参数设置了虚拟内存回收directory和i-node缓冲的倾向,这个值越大。越易回收


vm.swappiness=40 //缺省60,减少这个参数会使系统尽快通过swapout不使用的进程资源来释放更多的物理内存

 

一般在rac的配置环境中配置这三个参数,可以防止换页引起节点短暂无响应,导致节点重启


2. 改善io系统的性能


overcommit_memory = 0
vm.overcommit_ratio = 10 //默认值是50,用于虚拟内存的物理内存的百分比


vm.dirty_ratio = 20 //默认值是40,为了保持稳定,持续的写入,把这个值调整的小一些,经验值是20


vm.dirty_background_ratio //缺省数值是500,也就是5秒,如果系统要求稳定持续的写,可以适当降低该值,把峰值的写操作平均多次,也避免宕机丢失更多的数据


vm.dirty_expire_centisecs //缺省是3000,也就是30秒,如果系统写操作压力很大,可以适当减小该值,但也不要太小;建议设置为 1500

 

vm的相关参数在/proc/sys目录下

 

相关命令

sysctl -p  //修改vm参数后,运行这个命令可以立即生效
sysctl -a  //查看所有的vm参数


与磁盘IO子系统有关的

 

/proc/sys/vm/dirty_ratio
这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,
表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内
存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合
时,应该降低其数值,一般启动上缺省是 10。下面是增大的方法:

  echo '40' > /proc/sys/vm/dirty_ratio

 

/proc/sys/vm/dirty_background_ratio
这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百
分比,意思是当写缓冲使用到系统内存多少的时候,pdflush开始向磁盘写出数据。增大之会
使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒
定的写入场合时,应该降低其数值,一般启动上缺省是 5。下面是增大的方法:

  echo '20' > /proc/sys/vm/dirty_background_ratio

 

/proc/sys/vm/dirty_writeback_centisecs
这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,
也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可
以把尖峰的写操作削平成多次写操作。设置方法如下:

 

  echo "200" > /proc/sys/vm/dirty_writeback_centisecs

 

如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:

 echo "1000" > /proc/sys/vm/dirty_writeback_centisecs

 


/proc/sys/vm/dirty_expire_centisecs
这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。
单位是 1/100秒。缺省是 3000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写
操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建
议设置为 1500,也就是15秒算旧。

 

 echo "1500" > /proc/sys/vm/dirty_expire_centisecs


当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),
那么这个值还是大些的好。

 

与网络IO子系统有关的

/proc/sys/net/ipv4/tcp_retrans_collapse
这个参数控制TCP双方Window协商出现错误的时候的一些重传的行为。但是在老的2.6的核
(<2.6.18)里头,这个重传会导致kernel oops,kernel panic,所以,如果出现有
tcp_retrans_*样子的kernel panic,可以把这个参数给设置成0:

 

  echo '0' > /proc/sys/net/ipv4/tcp_retrans_collapse

 

提高Linux应对短连接的负载能力
在存在大量短连接的情况下,Linux的TCP栈一般都会生成大量的 TIME_WAIT 状态的socket。
你可以用下面的命令看到:

 

  netstat -ant| grep -i time_wait

 

有时候,这个数目是惊人的:

 

  netstat -ant|grep -i time_wait |wc -l


可能会超过三四万。这个时候,我们需要修改 linux kernel 的 tcp time wait的时间,缩短之,
有个 sysctl 参数貌似可以使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,
也就是60秒,很多网上的资料都说将这个数值设置低一些就可以减少netstat 里面的TIME_WAIT状态,
但是这个说法是错误的。经过认真阅读Linux的内核源代码,我们发现这个数值其实是输出用的,
修改之后并没有真正的读回内核中进行使用,而内核中真正管用的是一个宏定义,在
$KERNEL/include/net/tcp.h里面,有下面的行:

 

  #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
                                    * state, about 60 seconds     */

 

而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目
(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10
秒比较合适,也就是把上面的修改为:

 

  #define TCP_TIMEWAIT_LEN (10*HZ) /* how long to wait to destroy TIME-WAIT
                                    * state, about 60 seconds     */

 

然后重新编译内核,重启系统即可发现短连接造成的TIME_WAIT状态大大减少:

 

 netstat -ant | grep -i time_wait |wc -l

 

一般情况都可以至少减少2/3。也能相应提高系统应对短连接的速度。


/proc/irq/{number}/smp_affinity
在多 CPU 的环境中,还有一个中断平衡的问题,比如,网卡中断会教给哪个 CPU 处理,
这个参数控制哪些 CPU 可以绑定 IRQ 中断。其中的 {number} 是对应设备的中断编号,
可以用下面的命令找出:

 

 cat /proc/interrupt


比如,一般 eth0 的 IRQ 编号是 16,所以控制 eth0 中断绑定的 /proc 文件名是
/proc/irq/16/smp_affinity。上面这个命令还可以看到某些中断对应的CPU处理的次数,
缺省的时候肯定是不平衡的。

 

设置其值的方法很简单,smp_affinity 自身是一个位掩码(bitmask),特定的位对应特
定的 CPU,这样,01 就意味着只有第一个 CPU 可以处理对应的中断,而 0f(0x1111)
意味着四个 CPU 都会参与中断处理。

 

几乎所有外设都有这个参数设置,可以关注一下。

 

这个数值的推荐设置,其实在很大程度上,让专门的CPU处理专门的中断是效率最高的,比如,
给磁盘IO一个CPU,给网卡一个CPU,这样是比较合理的。

 

 

 

------end------

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wyzxg/article/details/5661489

智能推荐

基于paddle的数据可视化以及paddlepaddle安装 百度深度学习7日—Day01_paddlepaddle label-程序员宅基地

文章浏览阅读2.6k次。百度深度学习7日—Day01数据可视化以及框架安装- 快速安装paddlepaddle1.环境准备 2.安装步骤 3.验证安装- 疫情数据可视化1.爬取丁香园公开数据2.安装第三方库pyecharts3.数据可视化快速安装paddlepaddle参考飞桨官方网站的安装说明(https://www.paddlepaddle.org.cn/documentation/d..._paddlepaddle label

poj 2954(pick定理)_2s=2a+b-2-程序员宅基地

文章浏览阅读198次。pick定理:一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。一个蛮神奇的定理。。用来求内点。。边界点作差求gcd就可以了。。#include#include#include#include#include#include#define inc(i,l,r) for(int_2s=2a+b-2

4.x版本内核中platform_device的生成_of_platform_bus_probe 与 of_platform_populate 的区别-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏9次。内核版本:Linux-4.9在3.x版本内核中platform_device不再静态定义,而是通过device tree来动态生成,例如(arch/arm/mach-s3c24xx/mach-sc2416-dt.c):[cpp] view plain copystatic void __init s3c2416_dt_machine_init(void) { of_platform_p..._of_platform_bus_probe 与 of_platform_populate 的区别

最新版CentOS8安装全流程_cent8安装-程序员宅基地

文章浏览阅读307次。前置条件你需要提前下载好VM虚拟机(百度下载就好很多)和CentOS8(建议官网直接下载)--需要链接可回复步骤一,打开VM虚拟机打开虚拟机,点击创建虚拟机,然后下面的步骤全部用图片展示。一目了然(保姆级别)..._cent8安装

跟着Datawhale学习集成学习_datawhale 集成学习-程序员宅基地

文章浏览阅读287次。集成学习1、机器学习的主要任务1.1监督学习1.1.1回归1.1.2 分类1.2无监督学习1、机器学习的主要任务我理解的机器学习就是,如何通过设计算法使得机器掌握学习的能力,发现数据中的规律。今天主要来熟悉机器学习的主要任务。具体地说,从有无因变量的角度出发,可以将机器学习任务分为有监督学习和无监督学习。其次,在有监督学习的大框架下,我们又可以根据因变量是否连续将问题分为回归问题和分类问题。下面我们可以来看一些例子(例子代码由Datawhale团队提供)首先导入相应的包import numpy as_datawhale 集成学习

require、include、require_once、include_once区别? 加载区别? 如果程序按需加载某个php文件你如何实现?-程序员宅基地

文章浏览阅读506次。作用上同:包含文件并运行(使用位置:函数内、函数外、方法内)异:include_once/require_once是include/require基础上进一步封装,增加了一个“文件是否已经包含”的判断性能上异:由于include_once/require_once是include/require基础上进一步封装,所以include_once/requir_require、include、require_once、include_once区别? 加载区别? 如果程序按需加载

随便推点

linux编写数字瀑布,Android Icon数字角标Badge的实现方式-程序员宅基地

文章浏览阅读150次。Android系统 小米,三星,索尼手机发送桌面快键提醒数字图标,在Android系统中,众所周知不支持BadgeNumber,虽然第三方控件BadgeView可以实现应用内的数字提醒,但对于系统的图标,特别是app的logo图标很难实现数字标志,即使是绘图的方式不断修改,但这种方式天生弊端,实用性很差。但幸运的是,某些ROM厂商提供了私有的API,但也带来了难度,API的不同意意味着代码量的增加..._"putextra(\"icon_number"

MySQL 1226 User 'root' has exceeded the 'max_questions' resource解决办法-程序员宅基地

文章浏览阅读9.6k次。User 'root' has exceeded the 'max_questions' resource (current value) 出现这个问题很可能是你查询的时候一次连接的时间太久了,每次连接的查询是有限制的,可以动态修改下max_question修改步骤为:use mysql;update user set max_questions=0;flush privile_user 'root' has exceeded the 'max_questions' resource (current value: 1)

solaris系统自启动文件设置_solaris errpom 修改启动项-程序员宅基地

文章浏览阅读1.2k次。一、知识点补充 在/etc/的目录里,可以看到rc1.d,rc2.d,rc3.d,rc0.d,rcS.d 和 init.d这些目录,在init.d的目录下放的脚本,会在系统启动时或运行级别改动是,由系统的init进程执行。在以rc开头的文件夹里放置的脚本都会以K或S开头命名,命名的规则是 [K/S] + [nn] + [scriptname], K表示kill,S表示start, n..._solaris errpom 修改启动项

OpenCV 图像边缘提取(二)—— Sobel算子原理及OpenCV API使用(C#)_opencv边缘捕捉-程序员宅基地

文章浏览阅读837次。OpenCV 图像边缘提取(二)—— Sobel算子原理及OpenCV API使用(C#):在图像边缘像素跃迁大,对图像求一阶导数,导数值最大处即为边缘像素所在位置。当dx=0,dy=1时候,y方向轮廓被保留明显;当dx=1,dy=0时候,x方向轮廓被保留明显;本案例在.NET使用的OpenCV库为。_opencv边缘捕捉

Android Studio学习笔记_注册界面_检查用户名与密码是否符合规则_android studio remote error: 请检查用户名或密码是否正确-程序员宅基地

文章浏览阅读9.4k次,点赞14次,收藏53次。2019/5/12/1:45这是我第一次在论坛上发文章,主要是想记录一下自己学习的过程最近在跟铁子做移动应用,于是开始学安卓死丢丢,今天进行到了注册界面部分。先粘贴XML部分的代码<?xml version="1.0" encoding="utf-8"?><RelativeLayout ="http://schemas.android.com/..._android studio remote error: 请检查用户名或密码是否正确

Android高仿qq及微信底部菜单的几种实现方式-程序员宅基地

文章浏览阅读79次。最近项目没那么忙,想着开发app的话,有很多都是重复,既然是重复的,那就没有必要每次都去写,所以就想着写一个app通用的基本框架,这里说的框架不是什么MVC,MVP,MVVM这种,而是app开发的通用模式,一般的app都是底部有几个菜单按钮,类似qq这样的,只不过个数不一样而已,设计上说底部的..._android仿腾讯底部导航栏

推荐文章

热门文章

相关标签