linux下的vm(虚拟内存)和windows下的作用是一样的,均是防止真实内存资源不足准备的. linux的vm相关参数

(2011-10-13 12:00:47)

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)

而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目

(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10

秒比较合适,也就是把上面的修改为:

#define TCP_TIMEWAIT_LEN (10*HZ)

然后重新编译内核,重启系统即可发现短连接造成的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,这样是比较合理的。

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

linux虚拟内存和win,linux下的vm(虚拟内存)和windows下的作用是一样的,均是防止真实内存资源不足准备的. linux的vm相关参数...相关推荐

  1. Linux下的dirent.h在windows下的替换

    一.问题背景 dirent.h是一个用于操作文件系统目录的接口文件,里面有目录相关的读取函数.但dirent.h是linux系统下的文件,在windows下不能直接应用,因为windows下的MSVC ...

  2. Win 管理器 运行命令 大全(Windows下的DOS运行命令)

    DOS 运行命令管理器字符大全 Win 管理器  运行命令 大全(Windows下的DOS运行命令) Nslookup-------IP 地址侦测器 explorer-------打开资源管理器 de ...

  3. linux下的工具移植到windows下

    一.cygwin是什么?     这个问题你最好google一下"cygwin的历史",或许能够获得更为详尽的答案.简而言之,cygwin是一个在windows平台上运行的linu ...

  4. 在Linux中某些程序无法运行,为何linux下的程序不能在windows下运行,不是“废话”那么简单...

    大家好,近期我发的文章都比较底层,过些天再发Linux基础方面的内容,多谢大伙儿的支持,回到正题. 您看,linux和windows都是运行在x86体系架构cpu上的操作系统,也就是指令的机器码都是一 ...

  5. Linux的.a、.so和.o文件以及与windows下的对应关系

    在说明Linux的.a..so和.o文件关系之前,先来看看windows下obj,lib,dll,exe的关系 windows下obj,lib,dll,exe的关系 lib是和dll对应的.lib是静 ...

  6. linux和android比较大小写,不区分大小写的串比较---Windows下的stricmp和Linux下的strcasecmp, 遇到了, 所以记录一下!...

    不区分大小写的串比较, 在实战中的应用还是很广泛的, 有时候可以增强程序的容错性, 下面我们来分别看看Windows下的stricmp和Linux下的strcasecmp Windows下的stric ...

  7. windows下python环境搭建_Linux/Windows下Python环境搭建步骤

    Python环境搭建首先到官网(www.python.org)下载相应的安装版本.主要分为Windows和Linux两种: 一.Linux下Python环境搭建 一般情况下,Linux系统都已经预安装 ...

  8. Linux下kiftd开机启动,解决Windows下kiftd无法正常启动的问题

    问题描述 在安装了Java后无法正常启动kiftd,问题现象包括但不限于:双击jar程序后黑屏一闪而过却不启动程序.双击jar程序后没有任何反应.提示"找不到Main Class" ...

  9. windows下安装tmux_如何在Windows下 git bash 环境内使用tmux

    文档日期:2019年11月19日 以下步骤按照如下链接一一实践.https://blog.pjsen.eu/?p=440 . I did a little research and have foun ...

  10. php dll是下32还是64位,windows下关于boost 64位和32位库的编译详细介绍

    常用编译命令: cd E:\OpenSource\boost_1_63_0\boost_1_63_0 编译32位库: x86环境下编译得先从开始菜单启动Visual Studio的Visual Stu ...

最新文章

  1. 80网口打印机ip固定工具_网络打印机端口用名称好是还是IP好?
  2. docker commit构建镜像(不推荐)
  3. 我就是古董店的那个店小二……专司收藏……
  4. centos svn服务器端口配置文件,centos下配置svn服务器
  5. install cuda5 on ubuntu12.04
  6. 如何在CentOS / RHEL上使用yum命令
  7. 关于VGG模型文件的存放位置
  8. (cljs/run-at (JSVM. :all) 一次说白DataType、Record和Protocol) 1
  9. QT编程之——使用全局变量
  10. 洛谷——P2043 质因子分解
  11. iis中间件_.NET Core技术研究中间件的由来和使用
  12. excel表格中忘了撤销工作表保护密码怎么办
  13. macbook proa1708_MacBook Pro 2017 A1708自己更换电池
  14. JMeter性能测试之使用CSV文件参数化
  15. 数据结构翻转课堂答疑实录——概述
  16. 解决com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
  17. 攻略| Win10 C盘越用越大 清理工具不管用可试试这个办法
  18. 互联网应用 zzl复习版
  19. 报如下错误:android.util.AndroidRuntimeException: You cannot combine custom titles with other title featur
  20. 电脑上传网速怎么测试软件,Win7如何测试电脑上传速度?

热门文章

  1. php添加开机启动脚本_php-fpm开机自动启动Shell脚本
  2. comon lisp标准_Common Lisp 的一些函数
  3. 如何把计算机管理的服务删掉,如何将win7电脑服务列表中残留的服务选项删除掉?...
  4. spring-boot推送实时日志到前端页面显示
  5. 物联网时代如何保障数据安全
  6. 《JavaScript高效图形编程(修订版)》——导读
  7. Magento版本比较:Magento社区版 vs Magento企业版本 vs MEC Magento专业版2
  8. oracle DBTIMEZONE时区调整
  9. linux 每日学一点《将LINUX变成路由器》
  10. Cmailserver和outlook配置