首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

linux内存映射mmap原理分析

内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,具体到代码,就是建立并初始化了相关的数据结构(struct address_space),这个过程有系统调用mmap...图1.内存映射原理 既然建立内存映射没有进行实际的数据拷贝,那么进程又怎么能最终直接通过内存操作访问到硬盘上的文件呢?那就要看内存映射之后的几个相关的过程了。...但是ptr所指向的是一个逻辑地址,要操作其中的数据,必须通过MMU将逻辑地址转换成物理地址,如图1中过程2所示。这个过程与内存映射无关。...这个过程与内存映射无关。 如果在拷贝数据时,发现物理内存不够用,则会通过虚拟内存机制(swap)将暂时不用的物理页面交换到硬盘上,如图1中过程4所示。这个过程也与内存映射无关。...效率 从代码层面上看,从硬盘上将文件读入内存,都要经过文件系统进行数据拷贝,并且数据拷贝操作是由文件系统和硬件驱动实现的,理论上来说,拷贝数据的效率是一样的。

4.3K41

Linux进程内存分析pmap命令

名称:        pmap - report memory map of a process(查看进程的内存映像信息)pmap命令用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。...映像支持文件,[anon]为已分配内存 [stack]为程序堆栈         Offset:  offset into the file  文件偏移         Device:  device...writeable/private: 276K    shared: 0K [root@C44 ~]#   最后一行的值 mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小...,即ps出的vsz writeable/private  表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小       shared 表示进程和其他进程共享的内存大小 查看进程

3.6K10

linux服务器内存——分析

早上到单位 发现服务器 mysql 服务器停了 然后起来了 查询日志 显示 内存满了 把mysql服务给杀了 linux 服务器如果 内存满了 会自动清理进程 防止服务器挂掉 选择的话 谁占的的内存大...就先杀谁 我的服务器里面 mysql服务占的内存是最大的 所以就把mysql就给杀了 image.png 然后 重启mysql 查询内存 image.png 在这说一下 怎么看linux内存 举个例子...空闲的内存数: 232M shared 当前已经废弃不用,总是0 buffers Buffer 缓存内存数: 62M cached Page 缓存内存数:421M 关系:total(1002M) = used...所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计,...,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常 swap用很多,可能你就要考虑加物理内存了.这也是linux内存是否够用的标准哦

23.8K10

Linux与JVM的内存关系分析

接下来主要就Linux与JVM之间的内存关系进行一些分析。...物理内存Linux活动时使用的主要内存区域;当物理内存不够使用时,Linux会把一部分暂时不用的内存数据放到磁盘上的SWAP中去,以便腾出更多的可用内存空间;而当需要使用位于SWAP的数据时,必须先将其换回到内存中...Linux和Java NIO在内核内存上开辟空间给程序使用,主要是减少不要的复制,以减少IO操作系统调用的开销。例如,将磁盘文件的数据发送网卡,使用普通方法和NIO时,数据流动比较下图所示: ?...现在分析这600m内存的分配情况: (1)Linux保留大约200m,这部分是Linux正常运行的需要, (2)Java服务的线程数量是160个,JVM默认的线程栈大小是1m,因此使用160m内存, (...四、总结 本文详细分析Linux与JVM的内存关系,比较了一般进程与JVM进程使用内存的异同点,理解这些特性将对Linux系统内存分配、JVM调优、Java程序优化有帮助。

4.5K80

Linux内存描述之高端内存--Linux内存管理(五)

而且从技术上你根本没法切换,因为这个时候程序内的任何地址都被映射给用户进程,你根本没法取到内核数据。 就算进入内核态时你切换MMU映射,如果这个时候你要读写用户进程的数据怎么办呢?...你能很方便取得内核数据和用户进程的数据 1.3 应用程序线性地址和动态内存分配 应用程序能使用的最大线性地址就是3G, 根据linux应用的分区方法: -------------------------...6.1 虚拟内核空间到物理空间的映射 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。...读者会问,系 统启动时,内核的代码和数据不是被装入到物理内存吗?它们为什么也处于虚拟内存中呢?这和编译程序有关,后面我们通过具体讨论就会明白这一点。...例如,进程的页目录PGD(属于内核数据结构)就处于内核空间中。

12.2K22

linux内存源码分析 - SLAB分配器概述

之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请者,而且我们知道也可页框大小为4K(也可设置为4M),这时候就会有个问题,如果我只需要1KB...而后面这张图,如kmalloc-8,kmalloc-16...还有dma-kmalloc-96,dma-kmalloc-192...这些都是普通SLAB,当需要为一些小数据分配内存时(比如一个结构体),...就会从这些普通SLAB中获取内存。...如果看了我linux内存源码分析 - 页框分配器的朋友,或许可以联系起来了。SLAB就是一组连续的页框,它的描述符结合在页描述符中,也就是页描述符描述SLAB的时候,就是SLAB描述符。...这个在kmem_cache结构中用cpu_cache表示,整个数据结构是struct array_cache,它的目的是将释放的对象加入到这个链表中,我们可以先看看数据结构: struct array_cache

1.9K40

Linux内核分析与应用2-内存寻址

本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。...讲的非常之好,推荐观看 留此记录,蜻蜓点水,可作抛砖引玉 2.1 内存寻址 数据连续存储和选择读取思想,是目前我们使用的几乎所有机器运行背后的灵魂 计算机体系结构中的核心问题之一,就是如何有效地进行内存寻址...分页的原理使得每个进程可以拥有自己独立的虚拟内存空间 (对) . 分Linux之所以巧妙地绕过段机制,主要是因为将段的基址设为0,即偏移量等于线性地址 (对) ....核心代码和数据所在的段的特权级都比较高,一般在ring0,而用户程序所在的段的特权级较低,一般在ring3。...段地址 虚拟地址转换与段分割 参考资料 [1] Linux 内核分析与应用: https://next.xuetangx.com/course/XIYOU08091001441/1516763

18430

Linux - Linux内存管理

---- 物理内存和虚拟内存 直接从物理内存读写数据要比从硬盘读写数据要快得多,因此,我们希望所有数据的读取和写入都在内存中完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。...要深入了解Linux内存运行机制,需要知道下面提到的几个方面。 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存。...---- 缓冲区(buffer)与缓存(cache)的异同 在Linux操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入这些内存中,然后再将数据分发给应用程序;当需要往文件中写入数据时...,操作系统先分配内存接收用户数据,然后再将数据内存写到磁盘上。...然而,如果有大量数据需要从磁盘读取到内存或者由内存写入磁盘,系统的读写性能就变得非常低下。 因为无论是从磁盘读数据,还是写数据到磁盘,都是一个很消耗时间和资源的过程。

52.1K41

golang 内存分析内存泄漏

pprof pprof 是 Go 语言中分析程序运行性能的工具,它能提供各种性能数据: 类型 描述 allocs 内存分配情况的采样信息 blocks 阻塞操作情况的采样信息 goroutine 当前所有协程的堆栈信息...heap 堆上内存的使用情况的采样信息 profile CPU占用情况的采样信息 threadcreate 系统线程创建情况的采样信息 trace 程序运行跟踪信息 以内存分析为例: 推荐直接使用命令进入命令行交互模式...: go tool pprof -alloc_space http://localhost:6061/debug/pprof/heap 可以使用参数指明分析的类型: inuse_space — amount...(*http2Client).newStream 653.03MB 2.11% 50.48% 653.03MB 2.11% context.WithValue top会列出5个统计数据: flat...分析goroutine本身的栈所占用的空间造成内存泄露,可以通过pprof来查找,方法与heap类似,都是取两次采样做比较。

8.8K20

redis内存分析内存优化

一、reids 内存分析 redis内存使用情况:info memory 示例: 可以看到,当前节点内存碎片率为226893824/209522728≈1.08,使用的内存分配器是jemalloc。...1、对象内存 对象内存,也即真实存储的数据所占用的内存。 redis k-v结构存储,对象占用可以简单的理解为 k-size + v-size。...-> 合理预估单次操作数据量(写或读)及网络时延ttl。 -> 禁止线上大吞吐量命令操作,如keys等。...2、关于linux的透明大页机制THP(Transparent Huge Page): THP机制会降低fork子进程的速度;写时复制内存页由4KB增大至2M。...3、关于linux配置: 一般需要配置linux系统 vm.overcommit_memory=1,以允许系统可以分配所有的物理内存。防止fork任务因内存而失败。

1.6K40

Linux内存描述之内存节点node--Linux内存管理(二)

因此linux内核需要用一种体系结构无关的方式来表示内存....内存中的每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在include/linux/mmzone.h, line 615 在分配一个页面时...的数据结构为typedef struct pglist_data pg_data_t, 这个结构定义在include/linux/mmzone.h, line 615中,结构体的内容如下: /* *...,它包含了该页面所有的内存页,被放置在全局mem_map数组中 bdata 这个仅用于引导程序boot 的内存分配,内存在启动时,也需要使用内存,在这里内存使用了自举内存分配器,这里bdata是指向内存自举分配器的数据结构的实例...; node_zones[MAX_NR_ZONES]数组保存了节点中各个内存域的数据结构, 而node_zonelist则指定了备用节点以及其内存域的列表, 以便在当前结点没有可用空间时, 在备用节点分配内存

7.6K20

Linux内存描述之内存页面page--Linux内存管理(四)

1 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个...内存中的每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在include/linux/mmzone.h, line 615, 每个结点关联到系统中的一个处理器...简单来说, 页是一个数据块, 可以存放在任何页框(内存中)或者磁盘(被交换至交换分区)中 我们今天就来详细讲解一下linux下物理页帧的描述 2 页帧 内核把物理页作为内存管理的基本单位....地址空间用于将文件的内容与装载数据内存区关联起来. mapping不仅能够保存一个指针, 而且还能包含一些额外的信息, 用于判断页是否属于未关联到地址空间的某个匿名内存区....即页的数据已经从块设备读取,且没有出错,数据是最新的 PG_dirty 与后备存储器中的数据相比,该page的内容已经被修改.

8K11

Linux内存描述之概述--Linux内存管理(一)

2 (N)UMA模型中linux内存的机构 Linux适用于各种不同的体系结构, 而不同体系结构在内存管理方面的差别很大. 因此linux内核需要用一种体系结构无关的方式来表示内存....Linux内核通过插入一些兼容层, 使得不同体系结构的差异很好的被隐藏起来, 内核对一致和非一致内存访问使用相同的数据结构 2.1 (N)UMA模型中linux内存的机构 非一致存储器访问(NUMA)模式下...在LINUX中引入一个数据结构struct pglist_data ,来描述一个node,定义在include/linux/mmzone.h 文件中。...一个管理区(zone)由struct zone结构体来描述,在linux-2.4.37之前的内核中是用typedef struct zone_struct zone_t数据结构来描述) 对于x86_32...从载入内核的低地址内存区域的后面内存区域,也就是ZONE_NORMAL开始的地方的内存的页的数据结构对象,都保存在这个全局数组中。

6.8K30

Linux内存描述之内存区域zone--Linux内存管理(三)

这样已经很好的表示物理内存了, 在一个理想的计算机系统中, 一个页框就是一个内存的分配单元, 可用于任何事情:存放内核数据, 用户数据和缓冲磁盘数据等等....任何种类的数据页都可以存放在任页框中, 没有任何限制. 但是Linux内核又把各个物理内存节点分成个不同的管理区域zone, 这是为什么呢?...一个管理区(zone)由struct zone结构体来描述,在linux-2.4.37之前的内核中是用typedef struct zone_struct zone_t数据结构来描述) 管理区的类型用zone_type...一个管理区(zone)由struct zone结构体来描述(linux-3.8~目前linux4.5),而在linux-2.4.37之前的内核中是用struct zone_struct数据结构来描述...互斥访问的锁(LOCKS)等. 4.1 struct zone管理域数据结构 struct zone在linux/mmzone.h中定义, 在linux-4.7的内核中可以使用include/linux

9K31
领券