在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。

缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。

Swap用途:Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。

swap清理:swapoff -a && swapon -a
注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大

1. 新建和增加SWAP分区(都必须用root权限,操作过程应该小心谨慎。)

  1)新建分区

.以root身份进入控制台(登录系统),输入
swapoff -a #停止所有的swap分区 . 用fdisk命令(例:# fdisk /dev/sdb)对磁盘进行分区,添加swap分区,新建分区,在fdisk中用“t”命令将新添的分区id改为82(Linux swap类型),最后用w将操作实际写入硬盘(没用w之前的操作是无效的)。 . mkswap /dev/sdb2 #格式化swap分区,这里的sdb2要看您加完后p命令显示的实际分区设备名 . # swapon /dev/sdb2 #启动新的swap分区 . 为了让系统启动时能自动启用这个交换分区,可以编辑/etc/fstab,加入下面一行
/dev/sdb2 swap swap defaults

  2)新增分区

.创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
# dd if=/dev/zero of=/root/swapfile bs=1M count= .格式化为交换分区文件:
# mkswap /root/swapfile #建立swap的文件系统 .启用交换分区文件:
# swapon /root/swapfile #启用swap文件 .使系统开机时自启用,在文件/etc/fstab中添加一行:
/root/swapfile swap swap defaults

2.调整swap空间使用的优先级

  如果内存够大,应当告诉 linux 不必太多的使用 SWAP 分区, 可以通过修改 swappiness 的数值。

  swappiness=0 的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

  各个操作系统的优先级可能都不一样,如果不调整,你会发现添加的虚拟内存几乎没有用到

  

查看当前swappiness值

  # cat /proc/sys/vm/swappiness

  修改swappiness值为60(临时修改,重启后即还原为默认值)

  # sudo sysctl vm.swappiness=

  永久修改swappiness默认值(重启生效)

  # vim /etc/sysctl.conf

  找到vm.swappiness ,如果没有则需要手动添加一行 vm.swappiness =  保存即可

3. 四种方法在 Linux 系统中查找最大的前 10 个文件

  

# find / -type f -print0 | xargs - du -h | sort -rh | head -n 

.4G /swapfile
.1G /home/magi/ubuntu-17.04-desktop-amd64.iso
564M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
378M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
377M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3247.snap

详解:

    • find:在目录结构中搜索文件的命令
    • /:在整个系统(从根目录开始)中查找
    • -type:指定文件类型
      f:普通文件
    • -print0:在标准输出显示完整的文件名,其后跟一个空字符(null)
    • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
    • xargs:将标准输入转换成命令行参数的命令
    • -0:以空字符(null)而不是空白字符(LCTT 译者注:即空格、制表符和换行)来分割记录
    • du -h:以可读格式计算磁盘空间使用情况的命令
    • sort:对文本文件进行排序的命令
    • -r:反转结果
    • -h:用可读格式打印输出
    • head:输出文件开头部分的命令
    • n -10:打印前 10 个文件

  2)

# find / -type f -exec du -Sh {} + | sort -rh | head -n 

.4G /swapfile
.1G /home/magi/ubuntu-17.04-desktop-amd64.iso
564M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
378M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
377M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3247.snap

详解:

    • find:在目录结构中搜索文件的命令
    • /:在整个系统(从根目录开始)中查找
    • -type:指定文件类型
      f:普通文件
    • -exec:在所选文件上运行指定命令
    • du:计算文件占用的磁盘空间的命令
    • -S:不包含子目录的大小
    • -h:以可读格式打印
    • {}:递归地查找目录,统计每个文件占用的磁盘空间
    • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
    • sort:对文本文件进行按行排序的命令
    • -r:反转结果
    • -h:用可读格式打印输出
    • head:输出文件开头部分的命令
    • n -10:打印前 10 个文件

  3)

# find / -type f -print0 | xargs - du | sort -n | tail - | cut -f2 | xargs -I{} du -sh {}

84M /var/lib/snapd/snaps/core_3247.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3604.snap
93M /usr/lib/firefox/libxul.so
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
377M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
378M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
564M /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
.1G /home/magi/ubuntu-17.04-desktop-amd64.iso
.4G /swapfile

详解:

    • find:在目录结构中搜索文件的命令
    • /:在整个系统(从根目录开始)中查找
    • -type:指定文件类型
      f:普通文件
    • -print0:输出完整的文件名,其后跟一个空字符(null)
    • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
    • xargs:将标准输入转换成命令行参数的命令
    • -0:以空字符(null)而不是空白字符来分割记录
    • du:计算文件占用的磁盘空间的命令
    • sort:对文本文件进行按行排序的命令
    • -n:根据数字大小进行比较
    • tail -10:输出文件结尾部分的命令(最后 10 个文件)
    • cut:从每行删除特定部分的命令
    • -f2:只选择特定字段值
    • -I{}:将初始参数中出现的每个替换字符串都替换为从标准输入读取的名称
    • -s:仅显示每个参数的总和
    • -h:用可读格式打印输出
    • {}:递归地查找目录,统计每个文件占用的磁盘空间

  4)

# find / -type f -ls | sort -k  -r -n | head - | column -t | awk '{print $7,$11}'

 /swapfile
/home/magi/ubuntu-17.04-desktop-amd64.iso
/home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
/home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
/home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
/usr/lib/x86_64-linux-gnu/libOxideQtCore.so.
/usr/lib/firefox/libxul.so
/var/lib/snapd/snaps/core_3604.snap
/var/lib/snapd/snaps/core_3440.snap
/var/lib/snapd/snaps/core_3247.snap

详解:

    • find:在目录结构中搜索文件的命令
    • /:在整个系统(从根目录开始)中查找
    • -type:指定文件类型
      f:普通文件
    • -ls:在标准输出中以 ls -dils 的格式列出当前文件
    • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
    • sort:对文本文件进行按行排序的命令
    • -k:按指定列进行排序
    • -r:反转结果
    • -n:根据数字大小进行比较
    • head:输出文件开头部分的命令
    • -10:打印前 10 个文件
    • column:将其输入格式化为多列的命令
    • -t:确定输入包含的列数并创建一个表
    • awk:模式扫描和处理语言
    • '{print $7,$11}':只打印指定的列

linux 之内存与磁盘的更多相关文章

  1. linux限制内存和磁盘使用

    一.如何限制用户的磁盘空间 1. 查看系统中所有用户的磁盘空间配额 sudo repquota /dev/vda1 2. 查看某个用户的磁盘空间配额 sudo edquota user_name 要想 ...

  2. linux查看内存及磁盘使用情况

    1.查看当前目录 命令:   df -h       (统一每个目录下磁盘的整体情况) 2.查看指定目录 在命令后直接放目录名,比如查看"usr"目录使用情况: 命令:   df ...

  3. Linux按照CPU、内存、磁盘IO、网络性能监测

      系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书 ...

  4. linux性能问题(CPU,内存,磁盘I/O,网络)

    一. CPU性能评估 1.vmstat [-V] [-n] [depay [count]] -V : 打印出版本信息,可选参数 -n : 在周期性循环输出时,头部信息仅显示一次 delay : 两次输 ...

  5. 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息

    CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...

  6. linux中监控CPU、内存和磁盘状态的shell脚本。(centos7)

    这篇博客中所写的脚本,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控.不过自己写一遍,可以让初学者对CPU.内存.磁盘等一些基础知识和基础命令更加了解. 1.利用vmstat工具监控CPU ...

  7. Linux按照CPU、内存、磁盘IO、网络性能监测【转载】

    本文转载地址:https://my.oschina.net/chape/blog/159640 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监 ...

  8. 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?

    1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...

  9. 测网速 fping Linux查看网络即时网速 linux性能问题(CPU,内存,磁盘I/O,网络)

    Linux查看网络即时网速 fping 是ping 工具的加强版本 例出局域网中存活的主机 (Ubuntu apt-get装上  cnetos装不上) zzx@zzx11:~$ fping -a 19 ...

随机推荐

  1. P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业

    P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...

  2. Android : 高通平台的HVX简介及调试

    一.HVX简介 HVX(“Hexagon矢量扩展”,Hexagon-六边形.Vector-矢量.Extensions-扩展)是Hexagon 680 DSP的典型特性,能够在执行图像处理应用中的计算负 ...

  3. easyUI之window窗口

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  4. hibernate关联总结

    在一对多与多对一的关联关系中,保存数据最好的通过多的一方来维护关系,这样可以减少update语句的生成,从而提高hibernate的执行效率! 配置一对多与多对一,这种叫“双向关联” 只配置一对多,  ...

  5. flutter 自定义tabbar 给tabbar添加背景功能

    flutter 自带的tabbar BottomNavigationBar有长按水波纹效果,不可以添加背景图片功能,如果有这方面的需求,就需要自定义tabbar了 自定义图片 我们使用BottomAp ...

  6. jquery简单入门1

    前端 html:展示 form: 属性: action和method 子标签: input(10种) text password radio checkbox file submit button r ...

  7. python解析模块(ConfigParser)使用方法

    python解析模块(ConfigParser)使用方法 很多软件都有配置文件,今天介绍一下python ConfigParser模块解析配置文件的使用方法 测试配置文件test.conf内容如下: ...

  8. 手写web框架之实现Bean容器

    实现Bean容器    使用ClassHelper可以获取所加载的类,但无法通过类来实例化对象,因此我们需要提供一个反射工具类,让它封装java反射相关的API,对外提供更好用的工具方法.将该类命名为 ...

  9. Linux批量处理常用方式

    批量处理思路在工作中使用的频率比较高,比如批量清理进程.批量删除文件.批量机器执行脚本等. 一.批量清理带java字样的进程 方式1:使用shell while语法. ${line}; done sh ...

  10. Spring-Kafka —— 消费后不提交offset情况的分析总结

    最近在使用kafka,过程中遇到了一些疑问,在查阅了一些资料和相关blog之后,关于手动提交offset的问题,做一下总结和记录. 消费端手动提交offset代码如下: /** * 这是手动提交的消费 ...