需要c fread 读取到文件尾文件或交换区到主存中,不会引起睡眠吗

以下试题来自:
单项选择题不是分组交换特点的是______。A.节点暂时存储的是一个个分组,而不是整个数据文件B.分组是暂时保存在节点的内存中,而不是被保存在节点的外存中,从而保证了较高的交换速率C.分组交换采用的是动态分配信道的策略,极大地提高了通信线路的利用率D.节点暂时存储的是整个数据文件,从而保证了较高的交换速率
为您推荐的考试题库
你可能感兴趣的试题
1A.SHAB.SHA-1C.MD4D.MD52A.anonymousB.guestC.nimingD.匿名3A.利用SSL访问Web站点B.将要访问的Web站点按其可信度分配到浏览器的不同安全区域C.在浏览器中安装数字证书D.要求Web站点安装数字证书4A.MTBFB.MTYRC.ETBFD.ETFR5A.只能包含1 00Mbps交换机B.只能包括1 000Mbps、100Mbps或10Mbps交换机C.包括1000Mbps 100Mbps交换机D.只能包括1 000Mbps交换机
热门相关试卷
最新相关试卷文章标签:&&&&&&&&
根据旧经验,页面文件或者交换应该是"加倍你的RAM"或者" 1.5 x 你的RAM 。",但是如果你有 10 GB的内存,你真的需要一个 32 GB的页面文件或者交换?你可能不需要这么多页面文件或者交换空间,考虑到现代计算机可能有一个页面文件或者交换分区的用途相关文章? 首先,让我们记住 都为你的计算机提供了额外的工作内存。 例如,如果计算机有 2 GB的RAM并打开大量程序或者大量文件,计算机可以能需要存储 3 GB 。 计算机将附加 1 GB的数据存储在它的页面文件或者交换空间中。 页文件或者交换器充当"溢出"区域以保存附加数据。 当使用计算机时,计算机自动将数据传送回内存,并在未使用数据时将数据移动到页面文件或者交换分区。如果使用旧的桌面计算机,可以以看到在最小化桌面程序之后会发生这种情况。 当你将它的最大化时,将需要一段时间才能出现,而磁盘活动LED闪烁。 内存比页面文件或者交换分区快得多。 ( 在现代计算机上,有足够多的RAM以保持桌面程序在RAM中不太常见。)大多数应用程序期望获得他们所请求的内存。 如果你的RAM已经满且没有页面文件,则打开另一个程序,程序可以能会崩溃。 具有额外空间程序的页面文件可以防止这种情况发生。页面文件和交换分区的其他用途Windows 和Linux也使用它们的页面文件和交换空间用于其他用途:Windows 崩溃转储 Dumps: 在 Windows 上,页面文件用于 要创建完全内存转储,页面文件必须至少是物理内存+ 1 MB的大小。 对于内核内存转储,在具有 8内存或者更多内存的系统上,页面文件必须至少为 800 MB 。 大多数人不需要完全内存转储,但是内核转储可能有用。 所需的800 MB页面文件相当小,但要求你保留页面文件,不要禁用它。 ( 这些信息来自于微软在TechNet发布的Linux系统中的休眠状态:休眠状态将系统内存保存到磁盘上,这样可以重新加载系统RAM的内容,以便重新引导系统的内容到交换分区时。 这个 this"挂起到磁盘。"你可能假设你需要一个交换分区和RAM一样大,但是实际上你只需要使用一个交换分区hibernate内存,你就可以休眠一个 4交换分区。 但是,如果使用的内存超过 4 GB,则可能无法休眠。 选择一个与RAM大小相等的交换分区通常是安全的。 注意,这只适用于冬眠- 如果你从不计划冬眠你的电脑,你不需要担心这个问题。 ( Windows 休眠时将数据保存到 C:hiberfil.sys 文件,因这里在 Windows 上休眠时不涉及页文件。)真正的问题:你使用多少内存?没有一个hard-and-fast规则可以告诉你需要多少分页或者交换空间。 答案取决于你对电脑做了什么,以及你使用了多少内存。 比如,如果你有2gb内存,但是你从未使用过超过 8 GB,那么你可能根本不需要分页或者交换空间- - 当然,你可能需要超过4 GB 。 从另一方面来说,你可能拥有一台带有4gb内存的计算机,但它可能经常使用 10 GB的数据集- 你可能需要至少2 GB的分页或者交换空间才可以安全地运行。 因此,拥有 8 GB内存的计算机可能不需要页面文件,而具有 64 GB内存的计算机可能需要一个巨大的页面文件。 这一切取决于计算机在做什么。大多数人都无法预测他们需要多少分页或者交换空间。 即使你现在看到你所用的内存,不知道你的程序在一周或者一个月内需要多少。Windows 可以自动管理它在 Windows 上,页面文件默认存储在 C:pagefile.sys. 中,Windows 自动管理该文件的大小。 它开始小,如果你需要它,增长到一个可能较大的尺寸。 我们建议让 Windows 自己处理页面文件的大小。 它不应该在你的系统驱动器上占用大量的空间。 在系统驱动器上,如果页面文件占用大量空间,这是因为过去需要大页面文件,而 Windows 自动增长为大小。例如在一个只有 10 GB内存的Windows 系统上,我们的页面文件目前只有 8.1 GB大小。 我们没有这么多内存,但是 Windows 正在使用一个小页面文件,直到我们需要更多。除非你使用所有的内存,否则删除页面文件的性能不好,只有系统不稳定问题。 你可以删除页面文件以节省系统驱动器的空间,但通常不值得这样做。如果你想手动设置一个大小- 不建议你要记住,如果你的系统有多少内存。 microsoft的configure配置页面文件大小的原因还没有更改。 如果必要,它始终支持系统崩溃转储,或者者扩展系统提交限制,如果必要。 例如当安装了大量物理内存时,可能不需要页面文件在高峰使用期间返回系统提交费用。 单独的物理内存可能足够大,可以做到这一点。"换句话说,它是关于实际需要多少内存的内存总量是"系统提交限制"。"Linux需要一个选择相关文章在Linux上,与 Windows 页面文件等效的是交换分区。 因为这是一个分区而不仅仅是一个文件,所以在安装Linux时,你必须选择交换分区的大小。 当然,你可以在以后改变分区大小,但是这样做会更有效。 Linux不能自动为你管理交换分区的大小。每个Linux发行版都使用自己的安装程序,并且每个Linux发行版都在它的安装程序中有一些逻辑,自动尝试选择适当的交换分区。 Linux发行版通常使用内存大小来帮助决定交换分区的大小。 安装Ubuntu时,典型的默认交换分区大小似乎是你的RAM加上另外一半的大小。 这确保hibernate能够正常工作。如果你在Linux安装程序中手动分区,那么RAM的大小加上0 GB是很好的经验法则,可以确保你实际上可以将你的系统设置休眠。 这通常应该是足够多的交换空间。 如果你有大量内存- 16左右,而且你不需要休眠,但是需要磁盘空间,那么你可能会遇到一个小型的2 GB交换分区。 同样,它真正取决于你的电脑实际使用多少内存。 但是这是一个好主意,只有一些交换空间,以防万一。旧"两倍大小的RAM"规则适用于具有 1或者 2 GB内存的计算机。 你需要多少页文件或者交换空间,没有one-size-fits-all答案。 这取决于你使用的程序和它们需要什么。 如果你不确定,坚持使用你的操作系统默认是一个好主意。图片信用:Flickr上的
文章标签:&&&&&&&&
栏目分类文章信息浏览:1评论:0&赞:&0收藏:00
评论 &&验证码:&
请输入左侧字符
评论请遵纪守法并注意语言文明,多给一些支持。提交评论帮库网友(IP:123.58.10.*) & 02:57&说:userMessagemessageCount
Copyright (C) 2011 HelpLib All rights reserved. &&服务器性能优化提升指南
服务器性能优化提升指南
什么是性能?
性能最通俗的衡量指标就是“时间”,CPU的使用率指的是CPU用于计算的时间占比,磁盘使用率指的是磁盘操作的时间占比,当CPU使用率100%时,意味着有部分请求来不及计算,响应时间增加或者超时;当磁盘使用率100%时,意味着有部分请求需要等待IO操作,响应时间也会增加或者超时。换言之,所有的操作都在理想的时间内,就不存在“性能优化“的问题。我们在分析性能的时候,总是会首先要找到是什么引起响应时间变慢了,对应单机性能的分析,一般我们会将目光锁定在CPU和IO上,因为对于应用程序一般分为CPU bound型和IO bound型,即计算密集型或者读写密集型;至于内存,其性能因素往往也会反映到CPU或者IO上,因为内存的设计初衷就是提高内核指令和应用程序的读写性能,当内存不足,系统可能进行大量的交换操作,这时候磁盘可能成为瓶颈;而缺页、内存分配、释放、复制、内存地址空间映射等等问题又可能引起CPU的瓶颈;更严重的情况是直接影响功能,这个就不仅仅是性能的问题了。性能优化并不是一个孤立的课题,除了响应时间的考虑,我们往往还需要综合功能完整性、安全性等等方面的问题。
性能分析的基础性能优化需要厚实的基础知识:操作系统——操作系统管理着应用程序所需要的所有资源,例如CPU和IO,当任何一个组件出现问题,我们的分析也是基于操作系统的,例如文件系统类型,磁盘类型,磁盘raid类型都需要操作系统管理和支持。系统编程技术——系统编程技术涉及到我们如何使用系统资源,例如对IO的操作我们可以使用buffering I/O,也可以使用Direct IO,可以采用同步的方式,也可以采用异步的方式,可以使用多进程,也可以使用多线程的方式。懂得不同编程技术的原理,有利于问题的分析。应用程序——例如数据库组件的数据类型、引擎、索引、复制、配置参数、备份、高可用等等都可能是性能问题的元凶。
性能分析的方法论
问题分析方面,各类方法论如金字塔思维、5W2H、麦肯锡七步法等等。套用5W2H方法,可以提出性能分析的几个问题
What-现象的表现是什么样的
When-什么时候发生
Why-为什么会发生
Where-哪个地方发生的问题
How much-耗费了多少资源,问题解决后能减少多少资源耗用
How to do-怎么解决问题
但是这些只能给出方向,性能分析需要找到原因需要更具体的方法,怎么解决一个问题也需要更加具体的方式。Brendan Gregg在《性能之巅:洞悉系统、企业与云计算》第二章中讲到大量的方法,比较突出的如Use方法、负载特征归纳、性能监控、静态性能调优、延时分析、工具法等等。其中工具法最具体,但是工具法也有自己的限制,如磁盘的饱和度,在磁盘使用率100%的时候,磁盘的负载可能还可以继续增加。在实际分析问题中,负载特征归纳更有指导意义,静态跟踪和动态跟踪让我们更容易更直观发现问题。CPU认识
CPU:CPU本身的架构和内核调度器的架构这里不做详细讲述,具体可以参考操作系统类书籍。但是仍然需要清楚一些概念:
.CPU内存缓存
.每指令周期数CPI和每周期指令数IPC
.用户时间/内核时间
针对应用程序,我们通常关注的是内核CPU调度器功能和性能
线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为:on-CPU:执行中,执行中的时间通常又分为用户态时间user和系统态时间sysoff-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态如果大量时间花在CPU上,对CPU的剖析能够迅速解释原因;如果系统时间大量处于off-cpu状态,定位问题就会费时很多。
分析方法与工具在观察CPU性能的时候,按照负载特征归纳的方法,可以检查如下清单:
整个系统范围内的CPU负载如何,CPU使用率如何,单个CPU的使用率呢?
CPU负载的并发程度如何?是单线程吗?有多少线程?
哪个应用程序在使用CPU,使用了多少?
哪个内核线程在使用CPU,使用了多少?
中断的CPU用量有多少?
用户空间和内核空间使用CPU的调用路径是什么样的?
遇到了什么类型的停滞周期?
要回答上面的问题,使用系统性能分析工具最经济和直接,这里列举的工具足够回答上面的问题:
上述问题中,调用路径和停滞周期的分析可以使用perf工具,也可以使用DTrace等更灵活的工具。其中perf支持对各类内核时间的跟踪计数统计,可以使用perf list查看。例如停滞周期分析可能十分复杂,需要对CPU和调度器架构有较系统的认识和了解,停滞的周期可能发生在一级、二级或者三级缓存,如缓存未命中,也可能是内存IO和资源IO上的停滞周期,perf中有诸如L1-dcahce-loads,L1-icache-loads等事件的计数统计。
实际案例火焰图帮助分析CPU的调用路径我们在压测mysql在某机型上的非原地更新性能时,分析mysql服务器延时情况时,分析了CPU上主要的函数调用。使用perf top能够看到调用次数的排名,但是调用关系不能展示出来。火焰图很清晰地提供了调用关系的视图(如下两图中的比例不同是因为perf top加了-p参数,火焰图分析是针对整个系统)。
认识内存如前所述,内存是为提高效率而生,实际分析问题的时候,内存出现问题可能不只是影响性能,而是影响服务或者引起其他问题。同样对于内存有些概念需要清楚:
用户分配器libc、glibc、libmalloc和mtmalloc
LINUX内核级SLUB分配器
分析方法与工具Brendan在书中给出了一些问题,比如内存总线的平衡性,NUMA系统中,内存是否被分配到合适的节点中去等等,这些问题在实际分析问题的时候,并不能作为切入点,需要持续的分析。因此笔者简化为如下清单:
系统范围内的物理内存和虚拟内存使用率
换页、交换、oom的情况
内核和文件系统缓存的使用情况
进程的内存用于何处
进程为何分配内存
内核为何分配内存
哪些进程在持续地交换
进程或者内存是否存在内存泄漏?
内存的分析工具如下
除了DTrace,所有的工具只能回答信息统计,进程的内存使用情况等等,至于是否发生内存泄漏等,只能通过分配跟踪。但是DTrace需要对内核函数有很深入的了解,通过D语言编写脚本完成跟踪。Perf也有一些诸如cache-miss、page-faults的事件用于跟踪,但是并不直观。
实际案例关于内存泄漏,从监控和顶层观察很难发现问题,一般都是从底层程序代码来分析,案例中使用各种观察工具和跟踪工具都不能很确定原因所在,只能通过分析代码来排查问题。最终发现是lua脚本语言分配内存速度快,包驱动的周期性服务的用法中,lua自动回收不能迅速释放内存,而是集中回收,如果频繁回收又可能带来CPU的压力。开发项目组最后采用的解决方式为分步回收,每次回收一部分内存,然后周期性全量回收。
逻辑IO vs 物理IO通常在讨论问题时,总是会分析IO的负载,IO的负载通常指的是磁盘IO,也就是物理IO,例如我们使用iostat获取的avgqu-sz、svctm和until等指标。因为我们的读写最终都是来自或者去往磁盘的,关注磁盘的IO情况非常正确。但是我们在进行读写操作的时候,面向的对象大多数时候并不会直接面向磁盘,而是面向文件系统的,除非使用raw io的方式。
如下图为通用的IO结构图,如果你想了解更详细,可以查看第二张图片。我们知道LINUX通过文件系统将所有的硬件设备甚至网络都抽象为文件来管理,例如read()调用时,实际就是就是调用了vfs_read函数,文件系统会确认请求的数据是否在页缓存中,如果不在内存中,于是将请求发送到块设备;此时内核会先获取到数据在物理设备上的实际位置,然后将读请求发送给块设备的请求队列中,IO调度器会通过一定的调度算法,将请求发送给磁盘设备驱动层,执行真正的读操作。在这一过程中可能发生哪些情况呢?如果应用程序执行的是大量的顺序读会怎样?随机读又会怎样?如果是顺序读,正确的做法就是进行预读,让请求的数据落到内存中,提升读效率。所以在应用程序发起一次读,从文件系统到磁盘的过程中,存在读放大的问题。
在写操作时同样存在类似的情况,应用程序发起对文件系统的IO操作,物理IO与应用程序之间,有时候会显得无关、间接、放大或者缩小。
无关:其他的应用程序:磁盘IO来自其他的应用程序,如监控,agent等其他用户:如同虚拟机母机下的其他用户其他内核任务:如重建raid,校验等
间接:文件系统预读:增加额外的IO,但是可能预读的数据无用文件系统缓冲:写缓存推迟或者合并回写磁盘,造成磁盘瞬时IO压力
放大:文件系统元数据:增大额外的IO文件系统记录尺寸:向上对齐等增加了IO大小
缩小:文件系统缓存:直接读取缓存,而不需要操作磁盘合并:一次性回写磁盘文件系统抵消:同一地址更新多次,回写磁盘时只保留最后一次修改压缩:减少数据量
分析与工具与文件系统相关的术语如下:
文件系统缓存
页缓存page cache
缓冲区高速缓存buffer cache
如下图为文件系统缓存的结构图,页缓存缓存了虚拟内存的页面,包括文件系统的页面,提升了文件和目录的性能。
Linux将缓冲区高速缓存放入到了页缓存中,即page cache包含buffer cache。文件系统使用的内存脏页由内核线程写回磁盘,如图中的页面扫描器kswapd为后台的页面换出进程,当内存不足,超过一定时间(30s)或者有过多的脏页时都会触发磁盘回写。
文件系统延时指的是一个文件系统逻辑请求从开始到结束的时间,包括在文件系统、内核磁盘IO子系统以及等待磁盘设备响应的时间。同步访问时,应用程序会在请求时阻塞,等待文件系统请求结束,异步方式下,文件系统对其并无直接影响,但是异步访问也分select、poll、epoll等方式,也就是所谓的异步阻塞、异步非阻塞。在异步方式下,一般是打印出用户层发起文件系统逻辑IO的调用栈,得到调用了哪个函数产生了IO。Linux未提供查看文件系统延时的工具和接口,但是磁盘的指标信息却比较丰富,但是很多情况下,文件系统IO和磁盘IO之间并没有直接关系,例如应用程序写文件系统,但是根本不关心数据什么时候写到磁盘了,而后台刷数据到磁盘时,可能造成磁盘IO负载增加,从磁盘角度,应用程序的写入可能受到影响了,而实际上应用程序并没有等待。
文件系统的分析可以试着回答下面的问题:哪个应用程序在使用文件系统?在对哪些文件进行操作?在进行什么样的操作,读写比是多少,同步还是异步?文件系统的缓存有多大,目前的使用情况?有遇到什么错误吗?是请求不合法,还是文件系统自身的问题?其实上面的问题,除了能够看到系统的内存情况,页缓存和buffer cache大小,能够看到哪些进程在进行读写操作,在读哪些文件,其他的比如应用程序对文件系统的读写比,同步还是异步,这些问题没有工具能给出明确的信息。当然我们可以通过跟踪应用程序的内核调用栈来发现问题,也可以在应用程序中输出日志来帮助分析。
与工具在理解磁盘IO之前,同样我们需要理解一些概念,例如:
随机IO/连续IO
对于磁盘IO,我们可以列出如下等问题来帮助我们分析性能问题:
每块磁盘的使用率是多少?
每块磁盘上有多长等待队列?
平均服务时间和等待时间时多少?
是哪个应用程序或者用户正在使用磁盘?
应用程序读写的方式是怎样的?
为什么会发起磁盘IO,内核调用路径是什么样的?
磁盘上的读写比是多少?
随机IO还是顺序IO?
Linux对磁盘的性能分析工具主要如下:
磁盘上是随机IO还是顺序IO,很多时候我们并没有很好的方式去判断,因为块设备回写磁盘的时候,随机IO可能已经被整理为顺序IO了。对于磁盘的分析同样可以使用perf跟踪事件或者DTrace设置探针。在分析mysql在某机型上做非全cache非原地更新时,为什么单实例无法将机器性能压满的时候,我们在分析的过程中跟踪了块设备的内核事件。我们对比了多实例非原地更新和单实例非原地更新的时候,磁盘的操作情况。如下为非原地更新时跟踪的结果。对结果分析后看到,单实例非原地更新时,将近30%是blk_finish_plug,有70%是blk_queue_bio,而多实例时正好相反,大量的blk_finish_plug和少量的blk_queue_bio(当然,这不是为什么性能压不满的原因)。
——————————————————————————
本文由天下数据美国服务器(www.idcbest.com)原创首发,转载请注明出处。
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点Posts - 819,
Articles - 0,
Comments - 1557
00:22 by 潇湘隐者, ... 阅读,
Swap交换分区概念 & 什么是Linux swap space呢?我们先来看看下面两段关于Linux swap space的英文介绍资料: & Linux divides its physical RAM (random access memory) into chucks of memory called pages. Swapping is the process whereby a page of memory is copied to the preconfigured space on the hard disk, called swap space, to free up that page of memory. The combined sizes of the physical memory and the swap space is the amount of virtual memory available. Swap space in Linux is used when the amount of physical memory (RAM) is full. If the system needs more memory resources and the RAM is full, inactive pages in memory are moved to the swap space. While swap space can help machines with a small amount of RAM, it should not be considered a replacement for more RAM. Swap space is located on hard drives, which have a slower access time than physical memory.Swap space can be a dedicated swap partition (recommended), a swap file, or a combination of swap partitions and swap files. & Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。 关于Swap分区,其实我们有很多疑问,如果能弄清楚这些疑问,那么你对Swap的了解掌握就差不多了。如何查看Swap分区大小? Swap分区大小应该如何设置?系统在什么时候会使用Swap分区? 是否可以调整? 如何调整Swap分区的大小?Swap分区有什么优劣和要注意的地方? Swap分区是否必要?那么我一个一个来看看这些疑问吧! &
查看Swap分区大小 & 查看Swap分区的大小以及使用情况,一般使用free命令即可,如下所示,Swap大小为2015M,目前没有使用Swap分区
[root@DB-Server ~]# free -m&&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&& buffers&&&& cachedMem:&&&&&&&&& 1000&&&&&&& 855&&&&&&& 145&&&&&&&&& 0&&&&&&&& 28&&&&&&& 296-/+ buffers/cache:&&&&&&& 530&&&&&&& 470Swap:&&&&&&&& 2015&&&&&&&&& 0&&&&&& 2015
另外我们还可以使用swapon命令查看当前swap相关信息:例如swap空间是swap partition,Swap size,使用情况等详细信息
[root@DB-Server ~]# swapon -sFilename&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Type&&&&&&&&&&& Size&&& Used&&& Priority/dev/sda3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& partition&&&&&& &&&&&& -1[root@DB-Server ~]# cat /proc/swapsFilename&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Type&&&&&&&&&&& Size&&& Used&&& Priority/dev/sda3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& partition&&&&&& &&&&&& -1[root@DB-Server ~]#
& Swap分区大小设置
& 系统的Swap分区大小设置多大才是最优呢? 关于这个问题,应该说只能有一个统一的参考标准,具体还应该根据系统实际情况和内存的负荷综合考虑,像ORACLE的官方文档就推荐如下设置,这个是根据物理内存来做参考的。
Swap Space
Up to 512 MB
<font style="font-size: 10.5pt" color="# times the size of RAM
Between 1024 MB and 2048 MB
<font style="font-size: 10.5pt" color="#.5 times the size of RAM
Between 2049 MB and 8192 MB
Equal to the size of RAM
More than 8192 MB&
&0.75 times the size of RAM
另外在其它博客中看到下面一个推荐设置,当然我不清楚其怎么得到这个标准的。是否合理也无从考证。可以作为一个参考。
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 等于内存大小。
8-64G 的物理内存,SWAP 设置为8G。
64-256G物理内存,SWAP 设置为16G。
上下两个标准确实也很让人无所适从。我就有一次在一台ORACLE数据库服务器(64G的RAM),按照官方推荐设置了一个很大的Swap分区,但是我发现其实这个Swap几乎很少用到,其实是浪费了磁盘空间。所以如果根据系统实际情况和内存的负荷综合考虑,其实应该按照第二个参考标准设置为8G即可。当然这个只是个人的一些认知。
& 释放Swap分区空间
[root@testlnx ~]# free -m&&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&& buffers&&&& cachedMem:&&&&&&&& 64556&&&&& 55368&&&&&& 9188&&&&&&&&& 0&&&&&&& 926&&&&& 51405-/+ buffers/cache:&&&&&& 3036&&&&& 61520Swap:&&&&&&& 65535&&&&&&&& 13&&&&& 65522[root@testlnx ~]# swapon -sFilename&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Type&&&&&&&&&&& Size&&& Used&&& Priority/dev/mapper/VolGroup00-LogVol01&&&&&&&& partition&&&&&& &&&&&&& 14204&& -1
使用swapoff关闭交换分区
[root@testlnx ~]# swapoff /dev/mapper/VolGroup00-LogVol01
使用swapon启用交换分区,此时查看交换分区的使用情况,你会发现used为0了
[root@testlnx ~]# swapon /dev/mapper/VolGroup00-LogVol01[root@testlnx ~]# free -m&&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&& buffers&&&& cachedMem:&&&&&&&& 64556&&&&& 55385&&&&&& 9171&&&&&&&&& 0&&&&&&& 926&&&&& 51406-/+ buffers/cache:&&&&&& 3052&&&&& 61504Swap:&&&&&&& 65535&&&&&&&&& 0&&&&& 65535[root@testlnx ~]#
& Swap分区空间什么时候使用
系统在什么情况或条件下才会使用Swap分区的空间呢? 其实是Linux通过一个参数swappiness来控制的。当然还涉及到复杂的算法。
这个参数值可为 0-100,控制系统 swap 的使用程度。高数值可优先系统性能,在进程不活跃时主动将其转换出物理内存。低数值可优先互动性并尽量避免将进程转换处物理内存,并降低反应延迟。默认值为 60。注意:这个只是一个权值,不是一个百分比值,涉及到系统内核复杂的算法。关于该参数请参考这篇文章[转载]调整虚拟内存,在此不做过多赘述。下面是关于swappiness的相关资料
& The Linux 2.6 kernel added a new kernel parameter called swappiness to let administrators tweak the way Linux swaps. It is a number from 0 to 100. In essence, higher values lead to more pages being swapped, and lower values lead to more applications being kept in memory, even if they are idle. Kernel maintainer Andrew Morton has said that he runs his desktop machines with a swappiness of 100, stating that "My point is that decreasing the tendency of the kernel to swap stuff out is wrong. You really don't want hundreds of megabytes of BloatyApp's untouched memory floating about in the machine. Get it out on the disk, use the memory for something useful."
Swappiness is a property of the Linux kernel that changes the balance between swapping out runtime memory, as opposed to dropping pages from the system page cache. Swappiness can be set to values between 0 and 100 inclusive. A low value means the kernel will try to avoid swapping as much as possible where a higher value instead will make the kernel aggressively try to use swap space. The default value is 60, and for most desktop systems, setting it to 100 may affect the overall performance, whereas setting it lower (even 0) may improve interactivity (by decreasing response latency.
& 有两种临时修改swappiness参数的方法,系统重启后失效
方法1:[root@DB-Server ~]# more /proc/sys/vm/swappiness60[root@DB-Server ~]# echo 10 & /proc/sys/vm/swappiness[root@DB-Server ~]# more /proc/sys/vm/swappiness10&方法2[root@DB-Server ~]#sysctl vm.swappiness=10
永久修改swappiness参数的方法就是在配置文件/etc/sysctl.conf里面修改vm.swappiness的值,然后重启系统
echo 'vm.swappiness=10' &&/etc/sysctl.conf
如果有人会问是否物理内存使用到某个百分比后才会使用Swap交换空间,可以明确的告诉你不是这样一个算法,如下截图所示,及时物理内存只剩下8M了,但是依然没有使用Swap交换空间,而另外一个例子,物理内存还剩下19G,居然用了一点点Swap交换空间。
另外调整/proc/sys/vm/swappiness这个参数,如果你没有绝对把握,就不要随便调整这个内核参数,这个参数符合大多数情况下的一个最优值。
& Swap交换分区对性能的影响
& 我们知道Linux可以使用文件系统中的一个常规文件或独立分区作为Swap交换空间,相对而言,交换分区要快一些。但是和RAM比较而言,Swap交换分区的性能依然比不上物理内存,目前的服务器上RAM基本上都相当充足,那么是否可以考虑抛弃Swap交换分区,是否不需要保留Swap交换分区呢?这个其实是我的疑问之一。在这篇What Is a Linux SWAP Partition, And What Does It Do?博客中,作者给出了swap交换空间的优劣
Advantages:
Provides overflow space when your memory fills up completely
Can move rarely-needed items away from your high-speed memory
Allows you to hibernate
Disadvantages:
Takes up space on your hard drive as SWAP partitions do not resize dynamically
Can increase wear and tear to your hard drive
Does not necessarily improve performance (see below)
其实保留swap分区概括起来可以从下面来看:
首先,当物理内存不足以支撑系统和应用程序(进程)的运作时,这个Swap交换分区可以用作临时存放使用率不高的内存分页,把腾出的内存交给急需的应用程序(进程)使用。有点类似机房的UPS系统,虽然正常情况下不需要使用,但是异常情况下, Swap交换分区还是会发挥其关键作用。
其次,即使你的服务器拥有足够多的物理内存,也有一些程序会在它们初始化时残留的极少再用到的内存分页内容转移到 swap 空间,以此让出物理内存空间。对于有发生内存泄漏几率的应用程序(进程),Swap交换分区更是重要,因为谁也不想看到由于物理内存不足导致系统崩溃。
最后,现在很多个人用户在使用Linux,有些甚至是PC的虚拟机上跑Linux系统,此时可能常用到休眠(Hibernate),这种情况下也是推荐划分Swap交换分区的。
其实少量使用Swap交换空间是不会影响性能,只有当RAM资源出现瓶颈或者内存泄露,进程异常时导致频繁、大量使用交换分区才会导致严重性能问题。另外使用Swap交换分区频繁,还会引起kswapd0进程(虚拟内存管理中, 负责换页的)耗用大量CPU资源,导致CPU飙升。
关于Swap分区的优劣以及是否应该舍弃,我有点恶趣味的想到了这个事情:人身上的两个器官,阑尾和扁桃体。切除阑尾或扁桃体是否也是争论不休。另外,其实不要Swap交换分区,Linux也是可以正常运行的(有人提及过这个问题)
& 调整Swap分区的大小
如下测试案例所示,Swap分区大小为65535M,我现在想将Swap分区调整为8G,那么我们来看看具体操作吧
1:查看Swap的使用情况以及相关信息
[root@getlnx14uat ~]# swapon -sFilename&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Type&&&&&&&&&&& Size&&& Used&&& Priority/dev/mapper/VolGroup00-LogVol01&&&&&&&& partition&&&&&& &&&&&&& 878880& -1[root@getlnx14uat ~]# free -m&&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&& buffers&&&& cachedMem:&&&&&&&&& 3957&&&&&& 3920&&&&&&&& 36&&&&&&&&& 0&&&&&&&& 39&&&&&& 3055-/+ buffers/cache:&&&&&&& 825&&&&&& 3132Swap:&&&&&&& 65535&&&&&&& 858&&&&& 64677
2: 关闭Swap交换分区
[root@getlnx14uat ~]# swapoff /dev/mapper/VolGroup00-LogVol01[root@getlnx14uat ~]# swapon -sFilename&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Type&&&&&&&&&&& Size&&& Used&&& Priority
3: 这里是缩小Swap分区大小,如果是增大Swap分区大小,那么就需要扩展正在使用的swap分区的逻辑卷,此处使用lvreduce命令收缩逻辑卷。
[root@getlnx14uat ~]# lvreduce -L 8G /dev/mapper/VolGroup00-LogVol01& WARNING: Reducing active logical volume to 8.00 GB& THIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce LogVol01? [y/n]: y& Reducing logical volume LogVol01 to 8.00 GB& Logical volume LogVol01 successfully resized
4:格式化swap分区
[root@getlnx14uat ~]# mkswap /dev/mapper/VolGroup00-LogVol01Setting up swapspace version 1, size = 8589930 kB
5:启动swap分区,并增加到/etc/fstab自动挂载
[root@getlnx14uat ~]# swapon -sFilename&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Type&&&&&&&&&&& Size&&& Used&&& Priority[root@getlnx14uat ~]# swapon /dev/mapper/VolGroup00-LogVol01[root@getlnx14uat ~]# swapon -sFilename&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Type&&&&&&&&&&& Size&&& Used&&& Priority/dev/mapper/VolGroup00-LogVol01&&&&&&&& partition&&&&&& &&&&&& -1
& 参考资料:

我要回帖

更多关于 c 读取文件到string 的文章

 

随机推荐