Linux简介(5)--内存与磁盘

简介

内存和磁盘都是计算机中的存储器,都具有存储功能,属于存储设备。在计算机中,磁盘和内存是相互配合共同作业的。
区别:

  • 1:内存是一种高速,造价昂贵的存储设备;而磁盘速度较慢,造价低廉。
  • 2:内存属于内部存储设备,磁盘属于外部存储设备
  • 3:内存是通过电流来实现存储;磁盘是通过磁记录来实现存储。所以电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。

内存

内存是程序与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的。其作用是存放CPU中的运算数据,以及与硬盘等外部存储设备交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。

磁盘

磁盘(disk)是指利用磁记录技术存储数据的存储器。
磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。
磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。

内存管理相关命令

内存:free

  • free -h : 以更友好的方式显示,会以K、M、G为单位来显示
  • free -m :以M为单位打印结果
    在这里插入图片描述

各列信息:

  • Mem:内存使用情况。
  • Swap:交换空间(虚拟内存)使用情况。
  • total:系统总共可用物理内存、交换空间大小。
  • used:已经被使用的物理内存、交换空间大小。
  • free:剩余可用物理内存、交换空间大小。
  • shared:被共享使用的物理内存大小。
  • buff/cache:被 buffer 和 cache 使用的物理内存大小。
    buffers:用于存放要输出到disk(块存储)的数据,在这里buff是指被OS buffer住的内存(written to disk);
    cached:存放从disk上读出的数据;buffer和cache是为了提高IO性能并由OS管理。
  • available:还可以被应用程序使用的物理内存大小。
    注意:
  • 应用程序可用内存/系统物理内存 > 70% 内存充足
  • 应用程序可用内存/系统物理内存 < 20% 内存不足,需要增加内存
  • 20% < 应用程序可用内存/系统物理内存 < 70%,表示内存基本够用
    vmstat命令
    vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控,是对系统的整体情况进行的统计。
    在这里插入图片描述
    memory列
  • swpd:使用的虚拟内存大小。
  • free:空闲物理内存大小。
  • buff:buffer cache内存大小。
  • cache:page cache的内存大小。
    swap列
  • si:每秒从交换区读入到内存的大小,由磁盘调入内存(单位:kb/s)
  • so:每秒从内存写出到交换区的大小,由内存调入磁盘(单位:kb/s)
    以上是与内存相关的两列。
    procs
  • r:运行和等待的CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不超过总核数的2倍,否则代表系统压力过大。
  • b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等
    cpu
  • us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序
  • sy:内核进程消耗的CPU时间百分比

为什么要使用虚拟内存?

大家都知道,进程需要使用的代码和数据都放在内存中,比放在外存中要快很多。问题是内存空间太小了,不能满足进程的需求,而且现在都是多进程,情况更加糟糕。所以提出了虚拟内存,使得每个进程用于3G的独立用户内存空间和共享的1G内核内存空间。(每个进程都有自己的页表,才使得3G用户空间的独立)这样进程运行的速度必然很快了。而且虚拟内存机制还解决了内存碎片和内存不连续的问题。为什么可以在有限的物理内存上达到这样的效果呢?这就要提到虚拟内存的实现机制了。

虚拟内存的实现机制

首先呢,提一个概念,交换空间(swap space),这个大家应该不陌生,在重装系统的时候,会让你选择磁盘分区,就比如说一个硬盘分几个部分去管理。其中就会分一部分磁盘空间用作交换,叫做swap space。其实就是一段临时存储空间,内存不够用的时候就用它了,虽然它也在磁盘中,但省去了很多的查找时间啊。当发生进程切换的时候,内存与交换空间就要发生数据交换一满足需求。所以啊,进程的切换消耗是很大的,这也说明了为什么自旋锁比信号量效率高的原因。

pidstat -r

在这里插入图片描述

  • PID: 进程标识符
  • minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数
  • majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
  • VSZ: 该进程使用的虚拟内存(以kB为单位)
  • RSS: 该进程使用的物理内存(以kB为单位)
  • %MEM: 该进程使用内存的百分比
  • Command:task命令名

查看磁盘信息

在这里插入图片描述

查看硬盘磁盘IO

在这里插入图片描述

  • rkB /s:每秒读取数据量kB;
  • wkB/s:每秒写入数据量kB;
  • svctm I/O:请求的平均服务时间,单位毫秒
  • await I/O:请求的平均等待时间,单位毫秒,值越小,性能越好
  • util:一秒钟有百分几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘;
    rkB/s,wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。
    svctm的值与await的值很接近,表示几乎没有I/O等待,磁盘性能好,如果await的值远高于svctm的值,则表示I/O队列等待太长,需要优化程序或更换更快磁盘

通过pidstat -d也可以查看磁盘IO信息
在这里插入图片描述

  • PID:进程id
  • kB_rd/s:每秒从磁盘读取的KB
  • kB_wr/s:每秒写入磁盘KB
  • kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
  • iodelay:任务的I/O阻塞延迟,以时钟周期为单位,包括等待同步块 I/O 和换入块 I/O 结束的时间
  • COMMAND:task的命令名

猜你喜欢

转载自blog.csdn.net/m0_49449205/article/details/113745909