linux内存
【翻译】linux中cgroups内存控制子系统memory.oom_control文件
翻译自:redhat文档的部分内容。 新linux内核cgroup的memory子系统提供memory.oom_control来开关Cgroup中oom killer,并且提供了消息接口。memory.oom_control包含一个标志(0或1)来开启或者关闭cgroup的OOM killer。如果开启(1),任务如果尝试申请内存超过允许,就会被系统OOM killer终止。OOM kille
日期 2023-06-12 10:48:40解决Linux下php-fpm进程过多导致内存耗尽问题
最近,发现个人博客的Linux服务器,数据库服务经常挂掉,导致需要重启,才能正常访问,极其恶心,于是决心开始解决问题,解放我的时间和精力(我可不想经常出问题,然后人工重启,费力费时)。分析问题发现问题以后,首先使用 free -m 指令查看当前服务器执行状况可以看到我的服务器内存是2G的,但是目前可用内存只剩下70M,内存使用率高达92%,很有可能是内存使用率过高导致数据库服务挂断。继续看详细情况
日期 2023-06-12 10:48:40Linux内存占用常用的几个分析方法,你确定都知道?
0. 引言: 系统内存是硬件系统中必不可少的部分,定时查看系统内存资源运行情况,可以帮助我们及时发现内存资源是否存在异常占用,确保业务的稳定运行。例如:定期查看公司的网站服务器内存使用情况,可以确保服务器的资源是否够用,或者发现服务器内存被占用异常可以及时解决,避免因内存不够导致无法访问网站或访问速度慢的问题。因此,对于 Linux 管理员来说,在日常工作中能够熟练在 Linux 系统下检查内存的
日期 2023-06-12 10:48:40Linux中查看进程占用内存的情况
Linux中查看某个进程占用内存的情况,执行如下命令即可,将其中的[pid]替换成相应进程的PID号:cat /proc/[pid]/status复制说明/proc/[pid]/status中所保存的信息除了内存信息,还包括进程IDs、信号等信息,此处暂时只介绍内存相关的信息。字段说明VmPeak进程所使用的虚拟内存的峰值VmSize进程当前使用的虚拟内存的大小VmLck已经锁住的物理内存的大小(
日期 2023-06-12 10:48:40linux内存管理之 ION 内存管理器浅析Ⅱ(system contig heap)
大家好,又见面了,我是你们的朋友全栈君。目录1 system contig heap 与 system heap2 system contig heap创建3 system contig heap内存分配4 system contig heap内存释放1 system contig heap 与 system heap从代码中我们看到system contig heap与system heap同属
日期 2023-06-12 10:48:40Linux进程间通信——使用共享内存
下面将讲解进程间通信的另一种方式,使用共享内存。 一、什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果
日期 2023-06-12 10:48:40Linux 查看占用内存前10的命令
Linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:ps aux|head -1;ps aux|grep -v PI|sort -rn -k +3|headLinux下获取占用内存资源最多的10个进程,可以使用如下命令组合:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head命令组合解析(针对CPU的,MEN也同样道理):拍摄
日期 2023-06-12 10:48:40Linux源码学习笔记day3 为访问内存做好哪些准备?
上一次,我们看到已经把操作系统最开始的512个字节,通过256次复制到0x90000处,然后跳转到0x9000:go这里去执行。今天我们主要看一下go标签具体做了啥?go: mov %cs, %ax # 将ds,es,ss都设置成移动后代码所在的段处(0x9000) mov %ax, %ds mov %ax, %es mov %ax, %ss mov $0xFF00, %sp # pu
日期 2023-06-12 10:48:40Linux - Linux内存管理
文章目录概念物理内存和虚拟内存内存的监控从内核的角度来查看内存的状态从应用层的角度来看系统内存的使用状态缓冲区(buffer)与缓存(cache)的异同交换空间的使用创建交换空间激活和使用交换空间移除交换空间概念内存管理是Linux系统重要的组成部分。为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。物理内存和虚拟内存直接从物理内存读写数据要比从
日期 2023-06-12 10:48:40Linux内存管理
本篇介绍本篇介绍下Linux的内存管理,用系统角度看内存的寻址和分配机制。内容介绍内存管理应该是系统中最难的模块之一了,而且历史也悠久,就先来简单回顾下。分段和分页谈到内存管理,最先想到的就是分段和分页机制。计算机刚出现的时候,并没有这些,刚开始是直接使用的物理地址,也就是代码中操作的地址是可以直接和物理地址对应上的,可是后来随着多进程调度的需求,以及有限的物理内存,于是人们就开始做规定,比如对于
日期 2023-06-12 10:48:40【Linux修炼】16.共享内存
共享内存一.共享内存的原理二.共享内存你的概念2.1 接口认识2.2演示生成key的唯一性2.3 再谈key三.共享资源的查看3.1 如何查看IPC资源3.2 IPC资源的特征3.3 进程之间通过共享内存进行关联四.共享内存的特点五.共享内存的内核结构六.共享内存函数的总结 共享内存是为通信而诞生的。除了上一节中讲到的公共文件的方案,还有什么其他方案呢?----以共享内存的方式 一.共享内存的原
日期 2023-06-12 10:48:40【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )
文章目录一、Linux 内核特性1、Linux 内核组织形式2、Linux 进程调度3、Linux 内核线程4、Linux 内核多平台虚拟内存管理5、Linux 虚拟文件系统6、Linux 内核模块机制7、Linux 定制系统调用8、Linux 网络模块架构一、Linux 内核特性1、Linux 内核组织形式Linux 内核组织形式 : 整体式结构 ;Linux 内核 由很多 过程 组成 , 每个
日期 2023-06-12 10:48:40【Linux 内核】进程管理 task_struct 结构体 ⑤ ( files 字段 | nsproxy 字段 | 信号处理相关字段 | 信号量和共享内存相关字段 )
文章目录一、task_struct 结构体字段分析1、files 字段2、nsproxy 字段3、信号处理相关字段4、信号量和共享内存相关字段在 Linux 内核 中 , " 进程控制块 " 是通过 task_struct 结构体 进行描述的 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构体的 ;task_struct &q
日期 2023-06-12 10:48:40【Linux 内核 内存管理】RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )
文章目录一、RCU 模式下更新链表项 list_replace_rcu 函数二、链表操作时使用 smp_wmb() 函数保证代码执行顺序一、RCU 模式下更新链表项 list_replace_rcu 函数在 Linux 源码 linux-5.6.18\include\linux\rculist.h 头文件中定义的就是 RCU 链表的操作 ,其中定义的static inline void list_
日期 2023-06-12 10:48:40【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )
文章目录一、Linux 内核 动态分配内存 系统接口函数二、统计输出 vmalloc 分配的内存一、Linux 内核 动态分配内存 系统接口函数Linux 内核 " 动态分配内存 " 是通过 " 系统接口 " 实现的 , 下面介绍几个重要的 接口函数 ;① 以 " 页 " 为单位分配内存 : alloc_pages , __get_fre
日期 2023-06-12 10:48:40【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )
文章目录一、堆内存管理二、内存描述符 mm_struct 结构体三、mm_struct 结构体中的 start_brk、brk 成员一、堆内存管理Linux 操作系统中的 " 堆内存 “ 是通过 malloc 等函数 ” 动态分配 " 的 内存区域 ;" 堆内存 “ 是 ” 连续的 “ 内存区域 , 其 " 生长方向 " 是 ” 自下而上 &quo
日期 2023-06-12 10:48:40【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )
文章目录一、Linux 系统 动态分配堆内存 方式二、brk 系统调用 动态分配堆内存一、Linux 系统 动态分配堆内存 方式Linux 系统中 , 提供了 2 种方式 进行 " 动态分配堆内存 " 操作 ;① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现堆内存的 扩张或
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )
文章目录一、Linux 内核中的内存管理模块二、硬件设备内存管理一、Linux 内核中的内存管理模块Linux 内核还需要处理如下内容 :① 页错误异常处理② 页表管理③ 引导内存分配器 : 页分配器 , 块分配器 , 不连续页分配器 , 连续内存分配器 , 每处理器内存分配器 ;" 页分配器 " 负责分配 内存物理页 , 使用的是 " 伙伴分配器 " ;&
日期 2023-06-12 10:48:40【Linux 内核 内存管理】虚拟地址空间布局架构 ④ ( 内存描述符 mm_struct 结构体成员分析 | hiwater_rss | start_code | start_brk )
文章目录一、mm_struct 结构体成员分析1、hiwater_rss 成员2、hiwater_vm 成员3、total_vm 成员4、locked_vm 成员5、start_code、end_code、 start_data、 end_data 成员6、start_brk、 brk、 start_stack 成员7、arg_start、 arg_end、env_start、 env_end 成
日期 2023-06-12 10:48:40【Linux 内核 内存管理】虚拟地址空间布局架构 ⑥ ( mm_struct 结构体源码 | vm_area_struct 结构体源码 )
文章目录一、mm_struct 结构体源码二、vm_area_struct 结构体源码一、mm_struct 结构体源码mm_struct 结构体 , 定义在 Linux 内核源码的 linux-4.12\include\linux\mm_types.h#359 位置 ;mm_struct 结构体中的 mmap 成员就是 vm_area_struct 结构体 类型的 , 该成员描述 "
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )
文章目录一、物理地址空间二、外围设备寄存器三、外围设备寄存器物理地址 映射到 虚拟地址空间一、物理地址空间" 物理地址空间 “ 是 CPU 处理器 在 ” 总线 " 上 访问内存的地址 ,RISC 处理器 只能访问 物理地址空间 , 系统的 外围设备 与 物理内存 都使用 统一的物理地址空间 访问 ;RISC 全称 " Reduced Instruction Set
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射相关数据结构 ① ( vm_area_struct 结构体 | task_struct、mm_struct、vm_area_struct 3 个结构体之间的关系)
文章目录一、vm_area_struct 结构体二、task_struct 进程描述符、mm_struct 内存描述符、vm_area_struct 虚拟内存区间 之间的关系一、vm_area_struct 结构体在 Linux 内核中 , 使用 vm_area_struct 结构体描述 " 进程 " 的 " 用户虚拟地址空间 " 的 地址区间 ;vm_ar
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
文章目录一、vm_area_struct 结构体成员分析1、shared 成员2、anon_vma_chain 成员3、anon_vma 成员二、vm_area_struct 结构体完整源码在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构体成员分析 | vm_ops 成员 | vm_operations_struct 结构体成员分析 )
文章目录一、vm_area_struct 结构体成员分析1、vm_ops 成员二、vm_operations_struct 结构体成员分析1、open 函数指针2、close 函数指针3、mremap 函数指针4、fault 函数指针5、huge_fault 函数指针6、map_pages 函数指针7、page_mkwrite 函数指针三、vm_area_struct 结构体完整源码四、vm_op
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理系统调用 ③ ( mmap 创建内存映射原理 | 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 并分配物理内存页 | mmap 库函数与内核系统调用函数 )
文章目录一、mmap 创建内存映射原理 ( 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 产生缺页异常并分配物理内存页 )1、分配虚拟内存页2、物理地址与虚拟地址进行映射3、产生缺页异常并分配物理内存页二、mmap 库函数与 mmap 内核系统调用函数一、mmap 创建内存映射原理 ( 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 产生缺页异常并分配物理内存页 )1、分配虚拟内存页分配
日期 2023-06-12 10:48:40【Linux 内核 内存管理】mmap 系统调用源码分析 ③ ( vm_mmap_pgoff 函数执行流程 | vm_mmap_pgoff 函数源码 )
文章目录一、vm_mmap_pgoff 函数执行流程二、vm_mmap_pgoff 函数源码调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数 , 继续向下执行 ;在 sys_mmap_pgoff 系统调用函数
日期 2023-06-12 10:48:40【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )
文章目录一、do_munmap 函数执行流程二、do_munmap 函数源码munmap 系统调用函数 调用了 vm_munmap 函数 , 在 vm_munmap 函数 中 , 又调用了 do_munmap 函数 , do_munmap 函数 是 删除 内存映射 的 核心函数 ;一、do_munmap 函数执行流程do_munmap 函数执行流程 :根据 unsigned long start
日期 2023-06-12 10:48:40【Linux 内核 内存管理】物理内存组织结构 ① ( 多处理器体系结构 | SMP/UMA 对称多处理器结构 | NUMA 非一致内存访问结构 )
文章目录一、多处理器体系结构1、SMP/UMA 对称多处理器结构2、NUMA 非一致内存访问结构一、多处理器体系结构1、SMP/UMA 对称多处理器结构对称多处理器结构 , 英文名称为 " Symmetrical Multi-Processing " , 简称 SMP ;SMP 又称为 UMA , 全称 " Uniform Memory Access " ,
日期 2023-06-12 10:48:40【Linux 内核 内存管理】物理内存组织结构 ⑤ ( 内存区域 zone 类型简介 | 内存区域类型zone_type 枚举源码分析 | zone_type 枚举源码 )
文章目录一、内存区域 zone 类型简介二、内存区域类型 zone_type 枚举源码分析1、ZONE_DMA 直接内存访问区域2、ZONE_DMA32 内存区域3、ZONE_NORMAL 普通内存区域4、ZONE_HIGHMEM 高端内存区域5、ZONE_MOVABLE 可移动区域6、ZONE_DEVICE 设备区域三、zone_type 枚举源码内存管理系统 3级结构 :① 内存节点 Node
日期 2023-06-12 10:48:40【Linux 内核 内存管理】memblock 分配器 ② ( memblock_type 内存块类型 | memblock_type 结构体成员分析 )
文章目录一、memblock_type 内存块类型二、memblock_type 结构体成员分析1、cnt 成员2、max 成员3、total_size 成员4、regions 成员5、name 成员一、memblock_type 内存块类型memblock 分配器 涉及到 内存块 类型 , 在 Linux 内核中 , 使用 struct memblock_type 结构体 描述 ,struct
日期 2023-06-12 10:48:40【Linux 内核 内存管理】memblock 分配器 ④ ( memblock、memblock_type、memblock_region 结构体的关系 )
文章目录一、memblock、memblock_type、memblock_region 结构体的关系1、memblock、memblock_type 关系2、memblock_type、memblock_region 关系二、上述数据结构关系图示一、memblock、memblock_type、memblock_region 结构体的关系1、memblock、memblock_type 关系me
日期 2023-06-12 10:48:40