我们在磁盘写操作持续繁忙的服务器上曾经碰到一个特殊的性能问题。每隔 30 秒,服务器就会遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。后来上网查了一下资料,通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。
下面是相关参数的调整:
一、2.6内核下
1、/proc/sys/vm/dirty_ratio
这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_ratio
2、/proc/sys/vm/dirty_background_ratio
这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_background_ratio
3、/proc/sys/vm/dirty_writeback_centisecs
这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是1/100秒。缺省数值是500,也就是5秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:
echo "100" > /proc/sys/vm/dirty_writeback_centisecs
如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:
echo "1000" > /proc/sys/vm/dirty_writeback_centisecs
4、/proc/sys/vm/dirty_expire_centisecs
这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是1/100秒。缺省是30000,也就是30秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。
echo "100" > /proc/sys/vm/dirty_expire_centisecs
当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。
5、/proc/sys/vm/vfs_cache_pressure
该文件表示内核回收用于directory和inodecache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inodecache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inodecache;增加该值超过100,将导致内核倾向于回收directory和inodecache
缺省设置:100
6、/proc/sys/vm/min_free_kbytes
该文件表示强制LinuxVM最低保留多少空闲内存(Kbytes)。
缺省设置:724(512M物理内存)
7、/proc/sys/vm/nr_pdflush_threads
该文件表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。
缺省设置:2(只读)
8、/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。
缺省设置:0
9、/proc/sys/vm/overcommit_ratio
该文件表示,如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。
系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:50(%)
10、/proc/sys/vm/page-cluster
该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:3(2的3次方,8页)
11、/proc/sys/vm/swapiness
该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。
二、2.4内核下
通过修改文件/proc/sys/vm/bdflush实现。文件中的九个参数含义如下:
nfract:dirty缓冲在缓冲区中的最大百分比。超过这个值将bdflush进程刷新硬盘。当可用内存比较少的情况下,将引发大量的磁盘I/O。为了均衡磁盘I/O,可以保持一个比较低的值。
Ndirty:bdflush进程一次写入磁盘的最大dirty缓冲块数量。这个值比较大将导致I/O急剧增加,如果这个比较小,bdflush进程执行不够从而可能导致内存的瓶颈。
Dummy2:未使用
Dummy3:未使用
Interval:kupdated工作和刷新的最小频率,默认值是5秒。最小值是0秒最大值是600秒。
Age_buffer:缓冲数据写到磁盘之前操作系统等待的最大时间。默认值是30秒,最小值是1秒最大值是6000秒。
Nfract_sync:dirty缓存激活bdflush进程同步的百分比。默认值是60%。
Nfract_stop:dirty缓存停止bdflush进程的百分比。默认值是20%。
Dummy5:未使用
比如在一个写操作频繁的数据库服务器上设置:
105000050301000
分享到:
相关推荐
总结来说,Proc文件系统是Linux系统中一个非常重要的组成部分,它不仅可以帮助我们了解系统的内部工作原理,还能让我们根据实际需求调整内核参数,以达到优化系统性能的目的。无论是对于系统管理员还是开发者来说,...
3. **磁盘I/O监控**:`/proc/diskstats`包含了磁盘I/O的统计信息,可用于显示硬盘读写速度。 4. **网络监控**:`/proc/net/dev`文件提供了网络接口的接收和发送字节数,可以用来监测网络流量。 5. **进程监控**:`...
Linux的proc文件系统是Linux内核提供的一种特殊文件系统,它并不存储于硬盘上,而是直接映射到内存中,反映了系统的实时状态。这个虚拟文件系统对于系统管理员和开发者来说至关重要,因为它提供了查看和交互内核运行...
在Linux中,`/proc`是一个虚拟文件系统,它并不占用磁盘空间,而是动态地反映了当前系统的运行情况。下面我们将详细探讨`/proc`文件系统的一些关键知识点: 1. **系统信息获取**: - `/proc/cpuinfo`:显示CPU信息...
Proc文件系统是一种虚拟文件系统,它并不在磁盘上实际存储数据,而是作为一个接口,允许用户和程序动态地查看和修改内核运行时的参数。Proc文件系统中的每个文件或目录都对应着内核的一个特定功能或状态,比如系统...
在Linux系统中,`/proc` 是一个特殊的文件系统,它实际上是一个虚拟的文件系统,其内容全部存在于内存之中,不占用实际的磁盘空间。通过 `/proc` 文件系统,用户和应用程序能够读取系统内核的数据,甚至更改某些内核...
在《Linux性能优化实战》案例中,我们深入探讨了如何利用Linux系统工具和技术来提升系统的运行效率和性能。Linux作为一款开源操作系统,其强大的可定制性和丰富的工具集使其成为性能优化的理想平台。以下是一些核心...
总的来说,Linux下使用IOMeter测试磁盘I/O性能是一个涉及网络配置、权限管理和测试参数设置的过程。正确地执行这些步骤,可以提供关于存储系统的详尽性能数据,这对于优化系统性能、规划存储资源分配以及诊断性能...
在Linux操作系统中,`proc`文件系统是一种特殊的虚拟文件系统,它并不存储在磁盘上,而是提供了一个接口,使得用户空间程序可以与内核态进行通信,获取或设置内核的状态信息。`proc`文件系统是Linux内核提供的一种...
12. IDE 硬盘性能调整 IDE 硬盘是Linux系统中的一个重要组件,控制着系统的磁盘I/O性能。通过调整该硬盘,我们可以提高系统的磁盘I/O性能。 Linux性能调优是一个复杂的任务,需要考虑多个方面的因素。但是,通过...
本文将详细探讨如何获取CPU负载、内存消耗、磁盘空间、磁盘I/O以及网络流量这五个核心参数。 1. **CPU负载** CPU的使用情况记录在`/proc/stat`文件中,包括用户态(user)、nice(nice)、系统态(sys)、空闲(idle)和...
Proc文件系统是Linux操作系统中一个特殊的虚拟文件系统,它并不实际存储在硬盘上,而是直接映射自内存,主要用于提供内核状态以及进程信息。Proc文件系统为用户提供了与内核交互的一种方式,允许用户通过读取或写入...
本文将详细介绍 Linux 服务器性能查看命令,包括查看操作系统及硬件信息、CPU 信息、Mem 信息、磁盘信息、网卡信息、主板信息、机器所有硬件信息等多个方面。 1. 查看服务器操作系统及硬件信息(压力测试前) 在...
通过分析`/proc`目录下的文件和使用适当的系统调用,我们可以获取到CPU、内存、磁盘和网络的关键性能指标。同时,了解这些监控工具的实现原理有助于自定义监控方案,适应特定的系统需求和环境。
Linux内核参数优化是提升系统性能的关键步骤,尤其是在运行虚拟化环境或高负载网络服务时。本文主要讨论如何针对Linux内核进行优化,重点关注TCP网络性能和磁盘缓存策略。 首先,关于磁盘缓存策略,KVM虚拟化环境下...
通过对系统资源的有效监控、内核参数的精细调整、存储系统的合理规划、网络配置的优化以及应用程序性能的细致分析,可以显著提高Linux服务器的整体性能。对于那些希望深入了解和掌握Linux服务器性能优化技术的专业...
【单机Linux下监测系统性能的设计与实现】 单机Linux性能监测系统(PMS,Standalone Linux Operating System Computer Performance Monitoring System)是一个专门用于实时监控Linux系统资源利用率的工具,尤其关注...
在Linux操作系统中,proc文件系统是一个非常特殊的虚拟文件系统,它并不直接存储磁盘上的数据,而是作为一个接口,提供了对系统内核状态的实时访问。proc目录下包含了大量的文件和目录,它们是进程信息、系统状态、...
在Linux世界里,了解和掌握PROC对于系统管理和优化至关重要。本篇文章将围绕"PROC学习文档"这一主题,深入探讨PROC文件系统及其相关知识。 首先,PROC文件系统不是一个实际存储数据的地方,而是内核与用户空间交互...
本文将通过案例介绍在生产环境中实施Linux性能调优的具体方法,详细内容涉及网络性能优化、磁盘子系统调优以及TCP参数调优等多个方面。 首先,Linux系统中的网络性能优化是调优工作的重点之一。通过调整内核参数,...