【Linux】内存与磁盘(转载)

本文详细介绍了内存和磁盘的区别,以及在Linux系统中如何使用`free`、`vmstat`命令来监控内存和磁盘的使用情况。内存作为程序运行的桥梁,其速度较快但易失,而磁盘虽慢但能持久保存数据。通过`free`命令可以查看内存使用状态,`vmstat`则提供关于虚拟内存和CPU活动的统计信息,帮助理解系统性能。
摘要由CSDN通过智能技术生成

版权声明:本文为CSDN博主「超大充电宝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Super_Powerbank/article/details/113781499

目录

内存与磁盘

1、内存

2、 磁盘

3、内存管理相关命令

(1)free

(2)vmstat

(3)查看磁盘信息

(4)查看硬盘磁盘IO


内存与磁盘


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

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


1、内存


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

2、 磁盘


磁盘(disk)是指利用磁记录技术存储数据的存储器。

磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。

3、内存管理相关命令

(1)free

常见用法:

free -h //以更友好的方式显示,会以K、M、G为单位来显示
free -m //以M单位打印结果
free -g //以G单位打印结果

在这里插入图片描述

 

释义:

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%,表示内存基本够用

(2)vmstat

vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控,是对系统的整体情况进行的统计。

在这里插入图片描述

 

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数(单位秒),第二个参数是采样的次数。

为什么需要使用虚拟内存?

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

虚拟内存的实现机制

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

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时间百分比。

我们还可以使用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命令名

(3)查看磁盘信息

df -h

在这里插入图片描述

 

(4)查看硬盘磁盘IO

iostat -xdk 2 3 //每两秒取样一次,一共取样三次

在这里插入图片描述

 

磁盘块设备分布:

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的命令名


————————————————
版权声明:本文为CSDN博主「超大充电宝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Super_Powerbank/article/details/113781499

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值