linux 内存介绍

news/2024/4/27 22:29:52/文章来源:https://blog.csdn.net/qq_42362891/article/details/137128017

大致共有四类: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.luyixian.cn/news_show_1027499.aspx

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

相关文章

分布式之缓存详解

缓存设计 导流&#xff1a;将原本复杂的操作请求&#xff08;sql 大堆&#xff09;&#xff0c;引导到简单的请求上。前人栽树后人乘凉。 缓存&#xff1a;空间换时间的一个做法。 redis, memcached,localcache guava&#xff0c;客户端缓存&#xff0c; user_info_xxxx : …

Micron 256 GB DDR5-8800 MCR DIMM:适用于大型服务器的大型内存

美光本周宣布&#xff0c;它已经开始对其 256 GB multiplexer combined &#xff08;MCR&#xff09; DIMM 进行采样&#xff0c;这是该公司迄今为止容量最大的内存模块。这些全新的基于 DDR5 的 MCRDIMM 面向下一代服务器&#xff0c;特别是那些由英特尔至强可扩展“Granite R…

TrackballControls是Three.js中的一个相机控件,它允许用户通过鼠标拖拽、滚轮缩放以及键盘移动相机,实现类似于球形的相机旋转操作。

demo案例 TrackballControls是Three.js中的一个相机控件&#xff0c;它允许用户通过鼠标拖拽、滚轮缩放以及键盘移动相机&#xff0c;实现类似于球形的相机旋转操作。这个控件可以用于3D场景中&#xff0c;以提供更好的用户体验。以下是对TrackballControls的入参、出参、方法…

pulsar: kafka on pulsar之把pulsar当kafka用

一、下载协议包&#xff08;要和pulsar版本比较一致&#xff09; https://github.com/streamnative/kop/releases?q2.8.0&expandedtrue二、在pulsar的根目录创建一个protocols目录&#xff0c;将上述包放到这个目录里 三、编辑broker.conf(如果是集群)或者standalone.con…

振弦采集仪在预防地质灾害监测中的作用与应用前景

振弦采集仪在预防地质灾害监测中的作用与应用前景 振弦采集仪&#xff08;String Vibrating Sensor&#xff0c;简称SVM&#xff09;是一种用于地质灾害监测的重要仪器&#xff0c;它通过测量地面振动信号来预测和预警地质灾害的发生。SVM的作用在于提供实时、准确的地质灾害监…

最优算法100例之10-数组中重复出现多次的数

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不…

QT环境搭建

学习QT 一、QT环境搭建二、QT的SDK下载三、认识QT SDK 中自带的一些程序 一、QT环境搭建 QT开发环境&#xff0c;需要安装三个部分。 c编译器&#xff08;gcc、cl.exe……不是visual studio&#xff09;QT SDK&#xff08;QT SDK里面已经内置了C编译器&#xff1b;SDK就是软件…

009_lhs_rhs_in_Matlab中的左值和右值约定

Matlab中的左值和右值约定 1. 左值和右值 我们在把Matlab作为计算器来使用时&#xff0c;有些时候会直接列出一个表达式&#xff0c;等着Matlab打印出计算结果。就这个简单的举动&#xff0c;在计算机科学中&#xff0c;也有一个高大上的名字&#xff0c;叫什么REPL&#xff…

OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;如何利用OpenCV4.9离散傅里叶变换 下一篇: 目标 本文内容主要介绍&#xff1a; 如何使用 YAML 或 XML 文件打印和读取文件和 OpenCV 的文本条目&#xff1f;如何对 OpenCV …

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

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

Unbtun-arach64架构安装PySide2(python3.6)

aarch平台是无法通过pip安装PySide2的&#xff0c;同时利用源码下载一直报错 1. 我是python3.6.9&#xff0c;在官网上找到对应的PySide2版本 5.15.2.所以首先在官网下载Qt5.15.2的源码&#xff1a;https://download.qt.io/archive/qt/5.15/5.15.2/single/ 2. 编译qt环境 aar…

win11蓝牙图标点击变灰,修复过程

问题发现 有一天突然心血来潮想着连接蓝牙音响放歌来听,才发现win11系统右下角菜单里的蓝牙开关有问题。 打开蓝牙设置,可以正常直接连上并播放声音,点击右下角菜单里的蓝牙开关按钮后,蓝牙设备也能正常断开,但是按钮直接变深灰色,无法再点击打开。 重启电脑,蓝牙开关显…

Parade Series - SVG Resource

iconfont https://www.iconfont.cn/?spma313x.search_index.i3.2.74e53a819tkkcG音符 <div class"form-group"><a href"Javascript:reload();" class"btn btn-icon btn-outline-light btn-block" style";"><svg t&q…

Docker命令及部署Java项目

文章目录 简介Docker镜像镜像列表查找镜像拉取镜像删除镜像镜像标签 Docker容器容器启动容器查看容器停止和重启后台模式和进入强制停止容器清理停止的容器容器错误日志容器别名及操作 Docker部署Java项目 简介 Docker是一种容器化技术&#xff0c;可以帮助开发者轻松打包应用…

学透Spring Boot — [二] Spring 和 Spring Boot的比较

欢迎关注我们的专栏 学透 Spring Boot 一、创建一个简单Web应用 本篇文章&#xff0c;我们将会比较 Spring 框架和 Spring Boot 的区别。 什么是 Spring? 也许你在项目中已经可以很熟练的使用 Spring 了&#xff0c;但是当被问到这个问题时&#xff0c;会不会犹豫一下&#…

SQLyog连接MySQL8.0+报错:错误码2058的解决方案

最近把mysql从5.7迁移到8.3.0发现连接不上 因为 MySQL 从 8.0 版本开始&#xff0c;新增了caching_sha2_password授权插件 技术博客 http://idea.coderyj.com/ 1.更换sqlyog 更新到13.1.3之后的版本 2.取消mysql8的加密授权机制 mysql> ALTER USER sqlyog% IDENTIFIED WIT…

Nginx【概述:网页服务器 并发能力强】【常见命令】【部署实战】【反向代理】

Nginx-概述 介绍下载和安装下载安装重点目录和文件如下 Nginx-命令常用命令1). 查看版本2). 检查配置文件3). 启动4). 停止5). 重新加载 环境变量配置 Nginx-应用配置文件结构部署静态资源介绍测试1). 将静态资源上传到 /usr/local/nginx/html 目录2). 启动nginx3). 访问4). 配…

栈和队列——c语言实现栈

本节复习栈和队列中栈的增删查改。 首先回顾一下栈的性质&#xff1a; 栈的存储数据的原则是“后入先出”&#xff0c; 先入的在栈底&#xff1b; 后入的在栈顶。&#xff0c;弹出数据时在栈顶弹出。 目录 准备文件 创建栈的结构体蓝图 栈的初始化 入栈 出栈 获取栈顶元素 获…

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索

宗喆和张正分别给我们带了 KCL 相关的最新进展&#xff0c;由蚂蚁集团开发的 Rust 编写的开源 DSL&#xff0c;目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念&#xff0c;解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…

目标检测的相关模型图:YOLO系列和RCNN系列

目标检测的相关模型图&#xff1a;YOLO系列和RCNN系列 前言YOLO系列的图展示YOLOpassthroughYOLO2YOLO3YOLO4YOLO5 RCNN系列的图展示有关目标检测发展的 前言 最近好像大家也都在写毕业论文&#xff0c;前段时间跟朋友聊天&#xff0c;突然想起自己之前写画了一些关于YOLO、Fa…