• Linux磁盘管理——swap分区


    转自:Linux Swap交换分区设置

    对swap分区的误解

    一种流行的、以讹传讹的说法是,安装Linux系统时,交换分区swap的大小应该是内存的两倍。也就是说,如果内存是2G,那么就应该分出4G的硬盘空间作为交换空间。其实这是严重的浪费。

    真实的情况是:可以根据你系统内存的大小,以及所使用的程序,自行决定交换分区的大小,甚至可以完全不用交换分区!

    什么是swap分区

    swap分区功能是在内存不够的情况下,OS先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。

    一定要有swap分区吗?

    做一个假设:如果你的内存足够大,极少出现内存不足的情况,那么你就不需要swap分区。事实上,这种可能性是完全存在的。现在玩《绝地求生》电脑最少都是16G起步了。日常使用的话,很少能用完全部的内存。在用不完内存容量的情况下,还要划出它两倍的硬盘空间用于内存交换,这不是浪费吗?
    可以说,在你内存基本够用的情况下,完全可以不要交换空间。在Windows下也是一样,在系统属性中,把虚拟内存设置为0,系统依然运行的很好。当然,如果你用的是服务器,为了避免业务高峰带来的资源紧张,还是要有专门的虚拟内存,有备无患。但是虚拟内存的大小不一定非要内存的两倍。

    查看swap分区

    那么怎么知道你的系统有没有用到交换空间呢?只需要在root用户下,运行下面的命令就可以知道了。
    free -m
    在日常应用中,通过上述命令看到交换空间的使用情况为0,那么你就不需要很大的虚拟内存,甚至可以完全不需要另辟硬盘空间作为虚拟内存。那么,万一有一天你需要了呢,难道要重装系统?大可不必,在Linux下虚拟内存不单可以放在单独的交换分区,也可以是一个在正常分区下的交换文件。

    查看swap 空间大小(总计):

    [root@localhost ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1982         141        1694           8         146        1668
    Swap:          2047           0        2047
    [root@localhost ~]# free -mh
                  total        used        free      shared  buff/cache   available
    Mem:           1.9G        141M        1.7G        8.5M        146M        1.6G
    Swap:          2.0G          0B        2.0G
    View Code

    -s 显示简短的设备讯息

    [root@localhost ~]# swapon -s
    Filename                Type        Size    Used    Priority
    /dev/dm-1                                  partition    2097148    0    -1
    [root@localhost ~]# swapon --show
    NAME      TYPE      SIZE USED PRIO
    /dev/dm-1 partition   2G   0B   -1
    View Code

    添加交换空间
      两种选择:添加一个交换分区或添加一个交换文件。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用,则添加交换文件。

    添加一个交换分区

      步骤如下:

    • 使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区)
    • 使用 mkswap 命令来设置交换分区:  

    # mkswap /dev/sdb2

    • 启用交换分区:  

    # swapon /dev/sdb2

    • 写入/etc/fstab,以便在引导时启用:

    /dev/sdb2swap swap defaults 0 0

    添加一个交换文件

    • 创建大小为512M的交换文件:

    # dd if=/dev/zero of=/swapfile1 bs=1024k count=512

    • 使用 mkswap 命令来设置交换文件:

    # mkswap /swapfile1

    • 启用交换分区:

    # swapon /swapfile1

    • 写入/etc/fstab,以便在引导时启用:

    /swapfile1 swap swap defaults 0 0

      新添了交换分区并启用它之后,请查看 cat /proc/swaps 或free 命令的输出来确保交换分区已被启用了。

    删除交换空间:

    • 禁用交换分区:

    # swapoff /dev/sdb2

    • 从 /etc/fstab 中删除项目;
    • 使用fdisk或yast工具删除分区。

      删除交换文件

    步骤同上。


    --------------------------------------------------------------------------------

      # free -m
                    total      used      free    shared   buffers    cached
      Mem:          377       180       197         0        19       110
      -/+buffers/cache:        50       327
      Swap:         572         0       572

    Mem 行显示了从系统角度看来内存使用的情况, total是系统可用的内存大小,数量上等于系统物理内存减去内核保留的内存.
    buffers和cached是系统用做缓冲的内存. buffers与某个块设备关联, 包含了文件系统元数据, 并且跟踪了块的变化.cache只包含了文件本身.

    -/+ buffers/cache 行则从用户角度显示内存信息,可用内存从数量上等于mem行used列值减去buffers和cached内存的大小.

    因为buffers和cached是操作系统为加快系统运行而设置的, 当用户需要时,可以只接为用户使用.

    top显示系统运行时的各进程动态、实时的状态(cpu、内存)

    top 中有3个列 VIRT RES SHR,标示了进程使用的内存情况.
    VIRT 标识这个进程可以使用的内存总大小, 包括这个进程真实使用的内存, 映射过的文件, 和别的进程共享的内存等.
    RES 标识这个这个进程真实占用内存的大小.
    SHR 标识可以和别的进程共享的内存和库大小.

    vmstat 显示内存的使用情况

    这些命令都是从/proc/meminfo中读取内存信息.

    关于/proc/meminfo中各行的含意,在内核源代码的Documentation/filesystems/proc.txt文件中有叙述

    系统的真实内存大小可以用 dmesg | grep[mM][eE][mM]看到

    /proc/pid/status显示一个进程的详细状态
    # cat /proc/5346/status
    Name: bash
    State: S (sleeping)
    SleepAVG: 98%
    Tgid: 5346
    Pid: 5346
    PPid: 5343
    TracerPid: 0
    Uid: 1000 1000 1000 1000
    Gid: 104 104 104 104
    FDSize: 256
    Groups: 6 24 29 44 104 113 1000 1001
    VmPeak: 6528 kB
    VmSize: 6528 kB
    VmLck: 0 kB
    VmHWM: 1976 kB
    VmRSS: 1976 kB
    VmData: 752 kB
    VmStk: 84 kB
    VmExe: 644 kB
    VmLib: 1788 kB
    VmPTE: 16 kB
    Threads: 1
    SigQ: 0/4294967295
    SigPnd: 0000000000000000
    ShdPnd: 0000000000000000
    SigBlk: 0000000000000000
    SigIgn: 0000000000384004
    SigCgt: 000000004b813efb
    CapInh: 0000000000000000
    CapPrm: 0000000000000000
    CapEff: 0000000000000000

    VmSize即为该进程内存总大小,和top输出中的VIRT一致.

  • 相关阅读:
    Core的学习三:容器的使用实例
    Core的学习二:【四步完成】.Net Core中Log4net的使用,配置,【框架.NET5】
    C#7 的一些新语法
    C#6 的一些新语法
    Core的学习一:Core部署在IIS下
    C# 特性【Attribute】【什么是特性?以及特性的一些修饰】
    C#反射
    泛型 -Generic 【why,原理,与普通方法,object的性能对比如何?泛型类、泛型方法、泛型接口、泛型委托,泛型约束,协变 逆变,泛型缓存】
    springboot通过切面编程实现系统请求操作日志记录
    Linux 【安装配置VM虚拟机】
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9166011.html
Copyright © 2020-2023  润新知