如何合理设置Linux的swap分区
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://commandos.blog.51cto.com/154976/115288
什么是Swap?
Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
Swap的原理是一个较复杂的问题,需要大量的篇幅来说明。在这里只作简单的介绍,在以后的文章中将和大家详细讨论Swap实现的细节。
众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。
Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
计算机用户会经常遇这种现象。例如,在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自己的数据,将其放进内存,然后接着运行。
需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
如何设置Swap分区大小
我记得曾经有人对Swap分区大小的设置这样评论过:“只要不怕浪费硬盘的话越大越好,因为linux内核在物理内存完全用完之前不会去动swap”
不过根据我的经验,可能不是这样喔!太大的 swap 空间会造成 kernel 以为有巨大的内存空间而毫不节制的想要把数据捉进内存中,从而导致 kernel 一直在做 memory swap,连带拖慢系统响应时间。 
老实说,1G RAM 如果不跑 p2p 之类的东西,那设个 256MB 就够用了;有 2G 的话连设都不要设。 
另外如果说真的因为某一软件确实需要巨大内存空间才能运作的话,那只好在 swap 上动手脚,但为了效能最好分散在多个实体硬盘上(等于类似 raid 效果)!
其实如何设置Swap分区的大小是最能检查一个Linux系统管理员的水平的测试,Swap到底该如何设置呢?我是这样认为的:首先我们需要了解这台服务器都要运行哪些程序、他们各自占用的内存大小为多少,经过确切的检查后,Swap分区的大小可以这样确定:
( 内存大小 + Swap分区大小 ) * 80%或70% = 程序需要占用总内存数
Swap分区在程序测试期间也有很大的用途,例如管理员能够通过Swap分区的使用状况,监测系统内存是否出现泄露,同时对Web项目等应用也可以提供一个比较好的流量峰值缓冲作用。一个Linux系统管理员要能够通过监测Swap分区的使用情况,对系统、程序有一个合理的评价。
系统性能监视 
Swap空间的分配固然很重要,而系统运行时的性能监控却更加有价值。通过性能监视工具,可以检查系统的各项性能指标,找到系统性能的瓶颈。本文只介绍一下在Solaris下和Swap相关的一些命令和用途。  
最常用的是Vmstat命令(在大多数Unix平台下都有这样一些命令),此命令可以查看大多数性能指标。  
例如:  
# vmstat 3  
procs memory swap io system cpu  
r b w swpd free buff cache si so bi bo in cs us sy id  
0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99  
0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100  
0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100  
…………  
命令说明:  
vmstat 后面的参数指定了性能指标捕获的时间间隔。3表示每三秒钟捕获一次。第一行数据不用看,没有价值,它仅反映开机以来的平均性能。从第二行开始,反映每三秒钟之内的系统性能指标。这些性能指标中和Swap有关的包括以下几项: 
procs下的w  
它表示当前(三秒钟之内)需要释放内存、交换出去的进程数量。  
memory下的swpd  
它表示使用的Swap空间的大小。  
Swap下的si,so  
si表示当前(三秒钟之内)每秒交换回内存(Swap in)的总量,单位为kbytes;so表示当前(三秒钟之内)每秒交换出内存(Swap out)的总量,单位为kbytes。  
以上的指标数量越大,表示系统越忙。这些指标所表现的系统繁忙程度,与系统具体的配置有关。系统管理员应该在平时系统正常运行时,记下这些指标的数值,在系统发生问题的时候,再进行比较,就会很快发现问题,并制定本系统正常运行的标准指标值,以供性能监控使用。  
另外,使用Swapon-s也能简单地查看当前Swap资源的使用情况。例如:  
# swapon -s  
Filename Type Size Used Priority  
/dev/hda9 partition 361420 0 3  
能够方便地看出Swap空间的已用和未用资源的大小。  
应该使Swap负载保持在30%以下,这样才能保证系统的良好性能。  
有关Swap操作的系统命令 
增加Swap空间,分以下几步:  
1)成为超级用户  
$su - root  
2)创建Swap文件  
# dd if=/dev/zero of=swapfile bs=1024 count=65536  
创建一个有连续空间的交换文件。  
3)激活Swap文件  
#/usr/sbin/swapon swapfile  
swapfile指的是上一步创建的交换文件。 4)现在新加的Swap文件已经起作用了,但系统重新启动以后,并不会记住前几步的操作。因此要在/etc/fstab文件中记录文件的名字,和Swap类型,如:  
/path/swapfile none Swap sw,pri=3 0 0  
5)检验Swap文件是否加上  
/usr/sbin/swapon -s 
删除多余的Swap空间。  
1)成为超级用户  
2)使用Swapoff命令收回Swap空间。  
#/usr/sbin/swapoff swapfile  
3)编辑/etc/fstab文件,去掉此Swap文件的实体。  
4)从文件系统中回收此文件。  
#rm swapfile  
5)当然,如果此Swap空间不是一个文件,而是一个分区,则需创建一个新的文件系统,再挂接到原来的文件系统上。

本文出自 “玄武·巴依” 博客,请务必保留此出处http://commandos.blog.51cto.com/154976/115288

[转]Linux 分区 swap的更多相关文章

  1. 。linux中swap分区

    1.swap分区的最重要的作用是防止网站流量突然增大而导致系统分配内存不够用而死机. 2.使用swap交换分区,会使服务器的性能降低很多,导致访问速度变慢. 3.交换分区.我们如果没有足够的内存,也许 ...

  2. Linux增加Swap分区

    Linux增加Swap分区 dd if=/dev/zero of=/data/swap/swapfile1 bs=4096 count=2097152 mkswap /data/swap/swapfi ...

  3. Linux 交换分区swap

    Linux 交换分区swap 一.创建和启用swap交换区 如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存 ...

  4. linux初学者-swap分区篇

    linux初学者-swap分区篇 swap是虚拟内存,是在硬盘中分区一块区域,当内存占满但是又急迫需要时临时当作内存使用,使用效率低于内存.本文将对linux系统中swap分区的建立做一个简要介绍. ...

  5. Linux - 创建交换分区 swap

    购买的 1GB 内存的 Linux 小机器,在编译安装 PHP 的时候内存捉急,只好开启 swap 交换分区来增大内存. [root@VM_139_38_centos php-7.2.12]# cat ...

  6. Linux 下 swap 分区及作用详解

    我们在安装系统的时候已经建立了 swap 分区.swap 分区是 Linux 系统的交换分区,当内存不够用的时候,我们使用 swap 分区存放内存中暂时不用的数据.也就是说,当内存不够用时,我们使用 ...

  7. Linux占用swap分区过高,物理内存还有剩余

    Linux占用swap分区过高,物理内存还有剩余 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如果系统的物理内存用光了,系统就会跑得 ...

  8. Linux 分区扩容(根分区扩容,SWAP 分区扩容,挂载新分区为目录)

    请访问原文链接:https://sysin.org/blog/linux-partition-expansion/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页: ...

  9. linux 分区 物理卷 逻辑卷

    今天我们主要说说分区.格式化.SWAP.LVM.软件RAID的创建哈~ 格式化 查看当前分区:fdisk   -l 这个命令我们以前是讲过的,我现在问下,ID那项是什么意思? 83 是代表EXT2和E ...

随机推荐

  1. spring data redis使用示例

    1. 配置依赖文件 <dependencies> <dependency> <groupId>org.springframework.data</groupI ...

  2. 利用js、css、html固定table的列头不动

    1.CSS <style type="text/css"> #scroll_head { position: absolute; display: none; } &l ...

  3. C#实现万年历(农历、节气、节日、星座、属相、生肖、闰年等)

    C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰等,代码如下: using System.Collections.Generic; using System.Text; using ...

  4. Dispatcher中Invoke与BeginInvoke

    [同步]Invoke Application.Current.Dispatcher.Invoke(AutoIncreaseNumber); [异步]BeginInvoke Application.Cu ...

  5. How to setup ELM327 Bluetooth WiFi for Android software Torque

    1.    Install OBDII 2.    Install Android Software Torque a)    Copy software to phone from CD b)   ...

  6. js 每秒刷新系统时间,可停止

    <title>无标题页</title> <script language="javascript" type="text/javascrip ...

  7. maven 添加中央仓库中没有的jar

    jar文件需要放到当前目录下,执行以下命令,设置 groupId,artifactId,version信息,方便项目pom引用 mvn install:install-file -Dfile=xxx. ...

  8. Problem:Minesweeper Master

    Google code jam Qualification Round 2014 题目链接:https://code.google.com/codejam/contest/dashboard?c=29 ...

  9. 基本java类-In.java

    package com.algorithm.api; /************************************************************************ ...

  10. 解决cell循环利用造成的重复勾选

    @interface ProfessionViewController (){ NSMutableArray *_professionArray;//cell模型数组 NSMutableArray * ...