linux 内存介绍

大致共有四类:VSS、RSS、PSS、USS ,通常情况下,VSS >= RSS >= PSS >= USS 

1.VSS(Virtual Set Size)虚拟耗用内存(包含共享库占用的内存)

VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已经申请但尚未使用的内存空间。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。

此大小还包括可能不驻留在RAM中的内存,如已分配但未写入的malloc。 VSS对于确定进程的实际内存使用非常少用。

2.RSS(Resident Set Size )实际使用物理内存(包含共享库占用的内存)

表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。

RSS可能会产生误导,因为它报告进程使用的所有共享库的总数,即使共享库只加载到内存中一次,无论有多少进程使用它。 RSS不是单个进程的内存使用的准确表示。

3. PSS( Proportional Set Size )实际使用的物理内存(比例分配共享库占用的内存)

表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。这种方式表示进程的内存使用情况较准确,但当只有一个进程使用共享库时,其情况和RSS一模一样

PSS可能有点误导,因为当进程被杀死时,PSS不能准确地表示返回到整个系统的内存。

进程终止时,不影响共享内存?

4.USS(Unique Set Size )进程独自占用的物理内存(不包含共享库占用的内存)

表示一个进程本身占用的内存空间大小,不包含其它任何成分,这是表示进程内存大小的最好方式!

USS是一个非常有用的数字,因为它表示运行特定进程的真正增量成本。当进程被终止时,USS是实际返回到系统的总内存。 USS是判断进程中的内存泄漏时最值得注意的数字。

内存信息的统计:

通过proc伪文件系统来实现! /proc/stat,/proc/meminfo,/proc/<pid>/status,/proc/<pid>/stat

  • /proc/stat:存放系统的CPU时间信息
  • /proc/meminfo:存放系统的内存信息

指令:cat /proc/meminfo

输出:

MemTotal:        2061616 kB

MemFree:         1093608 kB

Buffers:          151140 kB

Cached:           479372 kB

SwapCached:            0 kB

Active:           516964 kB

Inactive:         374672 kB

Active(anon):     261412 kB

Inactive(anon):     5604 kB

Active(file):     255552 kB

Inactive(file):   369068 kB

/proc/<pid>/status:存放进程的CPU时间信息以及一些综合信息,以下内容并不是每一个 Linux 系统上都有的,根据 Linux 设计和版本,可能多出或者少了某些项

示例:

VmPeak是占用虚拟内存的峰值,也就是最高的一个值,而且是虚拟内存,所以有时候会比物理内存要大。PS和TOP指令都是利用VmPeak计算内存占用的。

VmPeak: 表示进程所占用最大虚拟内存大小

VmSize: 表示进程当前虚拟内存大小

VmLck: 表示被锁定的内存大小

VmHWM: 表示进程所占用物理内存的峰值

VmRSS: 表示进程当前占用物理内存的大小(与procrank中的RSS)

VmData: 表示进程数据段的大小

VmStk: 表示进程堆栈段的大小

VmExe: 表示进程代码的大小

VmLib: 表示进程所使用共享库的大小

VmPTE: 表示进程页表项的大小

  • /proc/<pid>/stat:保存着进程的CPU信息。

私有内存和物理内存的区别?

一个进程内的物理内存是否等价于私有内存呢?私有内存包括虚拟内存嘛?

(1)物理内存:

物理内存指的是计算机主板上的随机存储器(RAM),它是用来存储计算机当前正在运行的程序和数据的。物理内存的大小是由计算机主板上内存插槽的数量和每个插槽上内存条的大小决定的

物理内存通常是以页式(Page-based)方式进行管理。在这种管理方式下,物理内存被分割成固定大小的页(通常为4KB),每个页都有一个唯一的物理地址

物理内存页可以被操作系统映射到进程的虚拟地址空间中,这个过程被称为内存映射。通过内存映射,操作系统可以让多个进程共享同一块物理内存,或者将物理内存映射到磁盘上的虚拟内存中。

(2)虚拟内存:

虚拟内存是计算机硬盘上划分出的一部分空间,它被操作系统用来扩展物理内存的容量,使得计算机可以运行更多的程序。

当物理内存不足以容纳当前正在运行的程序和数据时,操作系统会将一部分暂时不使用的数据从物理内存中移动到虚拟内存中,从而释放出物理内存,让正在运行的程序能够继续执行。

虚拟内存的大小可以根据需要动态调整,但是它的访问速度比物理内存要慢得多

虽然一个进程分配的4GB的内存地址, 但是其实真正能用的空间只有低地址的2GB空间, 在低地址的2GB空间中有2个占64KB的空间无法使用, 分别是空指针赋值区和64KB禁入区。

(3)私有内存:

私有内存指的是进程在运行过程中使用的内存空间,只有该进程能够访问和操作这部分内存,其他进程无法直接访问和修改该进程的私有内存空间,这为进程提供了一定的安全性和隔离性。通常使用VirtualAlloc函数申请的内存属于私有内存

共享内存是一种用于实现进程间通信的机制,它允许多个进程访问同一块物理内存,从而达到共享数据的目的。通常使用CreateFileMapping函数申请的内存属于共享内存。

内存映射文件是一种将磁盘文件映射至应用程序进程虚拟内存中的技术,使用内存映射文件,应用程序可以将磁盘上的文件视为一个地址空间,向访问内存一样直接访问文件内容

(4)共享内存:

共享内存是一种用于实现进程间通信的机制,它允许多个进程访问同一块物理内存,从而达到共享数据的目的。通常使用CreateFileMapping函数申请的内存属于共享内存。

内存映射文件是一种将磁盘文件映射至应用程序进程虚拟内存中的技术,使用内存映射文件,应用程序可以将磁盘上的文件视为一个地址空间,向访问内存一样直接访问文件内容

内存映射之文件共享

写拷贝: 写拷贝(Copy-on-write)是一种内存管理技术,常用于优化进程间数据传输和共享内存。当一个进程需要访问共享内存中的某个区域时,操作系统将该区域映射到该进程的虚拟地址空间中。如果进程仅仅是读取这个区域的内容,那么它将直接读取共享内存中的数据。但是,如果进程试图修改共享内存中的数据,那么操作系统会为该进程复制一份共享内存的数据,使得该进程可以在独立的副本中进行修改,而不会影响到其他进程.


 参考:

https://blog.csdn.net/xf555er/article/details/129730839

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576139.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

量化交易入门(二十六)RSI指标实现,能盈利吗?

RSI的理论学完了&#xff0c;我们接着用苹果股票的历史数据来回测一下&#xff0c;看看这个指标靠不靠谱。 示例代码 import backtrader as bt import yfinance as yf# 定义RSI策略 class RSIStrategy(bt.Strategy):params ((rsi_period, 14),(rsi_upper, 70),(rsi_lower, 30…

3.28作业

#include <iostream> using namespace std; // 构造函数示例 class MyClass { private: int data; public: // 默认构造函数 MyClass() { data 0; } // 带参数的构造函数 MyClass(int value) { data value; } …

Prometheus +Grafana +node_exporter可视化监控Linux虚机

1、介绍 待补充 2、架构图 待补充 Prometheus &#xff1a;主要是负责存储、抓取、聚合、查询方面。 node_exporter &#xff1a;主要是负责采集物理机、中间件的信息。 3、搭建过程 配置要求&#xff1a;1台主服务器 n台从服务器 &#xff08;被监控的linux虚机&am…

B2902A是德科技B2902A精密型电源

181/2461/8938产品概述&#xff1a; Agilent B2902A 精密源/测量单元 (SMU) 是一款 2 通道、紧凑且经济高效的台式 SMU&#xff0c;能够源和测量电压和电流。它用途广泛&#xff0c;可以轻松、高精度地执行 I/V&#xff08;电流与电压&#xff09;测量。4 象限源和测量功能的集…

openstack 不能调度到某主机上分析

dashboard显示有足够资源创建虚拟机 创建一个1c2g20g配置的虚拟机&#xff0c;在过滤时把10-197-0-2这个主机过滤掉了&#xff0c;日志如下&#xff1a; 2024-03-25 17:52:14.087 26 DEBUG nova.scheduler.filters.disk_filter [req-8f2f32fb-1efe-4e5d-81fc-618210c7c76d 773…

第4章.精通标准提示,引领ChatGPT精准输出

标准提示 标准提示&#xff0c;是引导ChatGPT输出的一个简单方法&#xff0c;它提供了一个具体的任务让模型完成。 如果你要生成一篇新闻摘要。你只要发送指示词&#xff1a;汇总这篇新闻 : …… 提示公式&#xff1a;生成[任务] 生成新闻文章的摘要&#xff1a; 任务&#x…

RPA使用Native Messaging协议实现浏览器自动化

RPA 即机器人流程自动化&#xff0c;是一种利用软件机器人或人工智能来自动化业务流程中规则性、重复性任务的技术。RPA 技术可以模拟和执行人类在计算机上的交互操作&#xff0c;从而实现自动化处理数据、处理交易、触发通知等任务。帮助企业或个人实现业务流程的自动化和优化…

mysql--事务四大特性与隔离级别

事务四大特性与隔离级别 mysql事务的概念事务的属性事务控制语句转账示例 并发事务引发的问题脏读脏读场景 不可重复读幻读幻读场景 事务的隔离级别读未提交读已提交可重复读&#xff08;MySQL默认&#xff09; 总结 mysql事务的概念 事务就是一组操作的集合&#xff0c;他是一…

深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;深入浅出的揭秘游标尺模式与迭代…

智能车主控板原理图原理讲解

智能车主控板原理图原理讲解 综述&#xff1a;本篇文章对智能车主控板的一部分电路进行原理分析&#xff0c;文末附加整体原理图。 1. 电源电路 &#xff08;1&#xff09;通过外接电池供电并通过电源模块电路&#xff0c;运用稳压芯片lm2940&#xff0c;将电源电压转化为5V…

2024年天府杯A题论文免费分享,全网首发

天府杯免费分享资料&#xff08;A题论文代码&#xff09;链接&#xff1a;https://pan.baidu.com/s/17QtYt036ORk1xGIDi0JSew 提取码&#xff1a;sxjm 摘要 在近年来&#xff0c;随着科技的快速发展和社会经济的不断进步&#xff0c;科学研究的作用和地位日益凸显。本文基于…

MYSQL数字函数:不可不知的数据处理利器

&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680;转载自&#xff1a;MYSQL数字函数&#xff1a;不可不知的数据处理利器 ✨ MYSQL数字…