首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 如何学习Linux性能优化?
02 | 基础篇:到底应该怎么理解“平均负载”?
03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)
09 | 基础篇:怎么理解Linux软中断?
10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?
11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
12 | 套路篇:CPU 性能优化的几个思路
13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?
14 | 答疑(二):如何用perf工具分析Java程序?
15 | 基础篇:Linux内存是怎么工作的?
16 | 基础篇:怎么理解内存中的Buffer和Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的Swap变高了(上)
20 | 案例篇:为什么系统的Swap变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?
22 | 答疑(三):文件系统与磁盘的区别是什么?
23 | 基础篇:Linux 文件系统是怎么工作的?
24 | 基础篇:Linux 磁盘I/O是怎么工作的(上)
25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)
26 | 案例篇:如何找出狂打日志的“内鬼”?
27 | 案例篇:为什么我的磁盘I/O延迟很高?
28 | 案例篇:一个SQL查询要15秒,这是怎么回事?
29 | 案例篇:Redis响应严重延迟,如何解决?
30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
31 | 套路篇:磁盘 I/O 性能优化的几个思路
32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
33 | 关于 Linux 网络,你必须知道这些(上)
34 | 关于 Linux 网络,你必须知道这些(下)
35 | 基础篇:C10K 和 C1000K 回顾
36 | 套路篇:怎么评估系统的网络性能?
37 | 案例篇:DNS 解析时快时慢,我该怎么办?
38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
40 | 案例篇:网络请求延迟变大了,我该怎么办?
41 | 案例篇:如何优化 NAT 性能?(上)
42 | 案例篇:如何优化 NAT 性能?(下)
43 | 套路篇:网络性能优化的几个思路(上)
44 | 套路篇:网络性能优化的几个思路(下)
45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?
46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?
当前位置:
首页>>
技术小册>>
Linux性能优化实战
小册名称:Linux性能优化实战
### 15 | 基础篇:Linux内存是怎么工作的? 在深入探讨Linux性能优化的过程中,理解Linux内存管理机制是至关重要的一环。Linux作为当今最流行的开源操作系统之一,其高效的内存管理能力是其稳定性和高性能的基石。本章将带您深入Linux内存管理的核心,揭示Linux是如何分配、使用、回收和交换内存的,以及这些过程如何影响系统性能。 #### 15.1 引言 Linux内存管理不仅仅是物理内存的分配与回收那么简单,它还包括了虚拟内存的管理、内存映射、页面缓存、交换空间的使用等多个复杂而精细的机制。这些机制共同协作,确保系统能够高效地运行,即使在面对内存资源紧张的情况时也能保持较好的性能。 #### 15.2 虚拟内存与物理内存 在理解Linux内存管理机制之前,首先需要明确两个基本概念:物理内存(Physical Memory)和虚拟内存(Virtual Memory)。 - **物理内存**:即计算机系统中实际安装的内存条(RAM),它是程序和数据可以直接访问的存储空间。物理内存的大小直接决定了系统能够同时运行多少程序以及这些程序能够使用多少数据。 - **虚拟内存**:是操作系统提供的一种内存抽象,它让程序认为自己拥有连续且远大于物理内存的内存空间。实际上,虚拟内存是通过物理内存、磁盘空间(作为交换空间)以及一系列复杂的映射机制实现的。这种机制允许系统同时运行多个程序,即使这些程序的总体内存需求远超过物理内存的大小。 #### 15.3 Linux内存管理架构 Linux的内存管理架构基于分页(Paging)机制,将物理内存和虚拟内存分割成固定大小的页面(Page),通常为4KB。这种设计使得系统能够以页面为单位高效地管理内存。 - **内存映射**:Linux通过页表(Page Table)将虚拟地址映射到物理地址。每个进程都有自己的页表,从而实现了进程间内存的隔离。当进程访问某个虚拟地址时,CPU会查询页表找到对应的物理地址,然后访问该物理地址上的数据。 - **页面缓存**:为了提高磁盘I/O性能,Linux实现了页面缓存(Page Cache)。当文件数据被读取到内存时,这些数据会被缓存在页面缓存中。当其他进程需要访问相同的数据时,可以直接从页面缓存中读取,而无需再次访问磁盘。 - **交换空间**:当物理内存不足时,Linux会使用磁盘空间作为交换空间(Swap Space)。系统会将部分不常用的内存页面交换到磁盘上,以释放物理内存供其他进程使用。虽然交换空间可以扩大系统的可用内存,但频繁地交换数据会导致性能下降。 #### 15.4 内存分配与回收 Linux内存管理子系统负责内存的分配与回收。当进程需要内存时,它会向内核发出请求,内核会从空闲内存池中分配相应数量的页面给进程。当进程不再需要这些内存时,它会通知内核释放这些页面,内核会将这些页面标记为空闲并返回给空闲内存池。 - **内存分配策略**:Linux提供了多种内存分配算法,如Buddy System(伙伴系统)、Slab Allocator(Slab分配器)等。这些算法旨在高效地管理内存,减少内存碎片,提高内存利用率。 - **内存回收机制**:当物理内存不足时,Linux会触发内存回收机制。这包括回收页面缓存中的旧数据、回收交换空间中的页面以及通过OOM Killer(Out Of Memory Killer)杀死占用过多内存的进程等。 #### 15.5 内存优化技巧 了解Linux内存管理的工作原理后,我们可以采取一些措施来优化内存使用,提高系统性能。 - **减少内存泄漏**:内存泄漏是指程序在分配内存后未能及时释放,导致可用内存逐渐减少。通过代码审查和工具检测(如Valgrind)可以发现并修复内存泄漏。 - **优化页面缓存**:合理设置文件系统的缓存参数(如`vm.dirty_ratio`、`vm.dirty_background_ratio`等),可以控制页面缓存的使用量,避免缓存过多导致物理内存紧张。 - **调整交换空间的使用**:根据系统负载和内存使用情况,合理设置交换空间的大小和激活条件。过度依赖交换空间会导致性能下降,但完全禁用交换空间也可能导致内存不足时系统崩溃。 - **使用内存管理工具**:Linux提供了多种内存管理工具,如`free`、`vmstat`、`top`、`sar`等,可以帮助监控和分析内存使用情况,及时发现和解决内存问题。 - **优化程序内存使用**:通过优化程序代码(如减少不必要的内存分配、复用已分配的内存等),可以减少程序对内存的需求,提高内存利用率。 #### 15.6 结论 Linux内存管理机制是Linux系统性能优化的重要组成部分。理解Linux内存是如何工作的,可以帮助我们更好地管理和优化系统内存,提高系统性能。从虚拟内存与物理内存的关系,到内存管理架构的深入剖析,再到内存分配与回收的具体实现,以及内存优化技巧的介绍,本章内容为我们提供了全面的Linux内存管理知识。通过学习和应用这些知识,我们可以更好地掌握Linux系统性能优化的精髓。
上一篇:
14 | 答疑(二):如何用perf工具分析Java程序?
下一篇:
16 | 基础篇:怎么理解内存中的Buffer和Cache?
该分类下的相关小册推荐:
云计算Linux基础训练营(上)
分布式数据库入门指南
企业级监控系统Zabbix
云计算那些事儿:从IaaS到PaaS进阶(一)
云计算那些事儿:从IaaS到PaaS进阶(五)
高并发架构实战
Web安全攻防实战(上)
Linux云计算网站集群之nginx核心
Web服务器Apache详解
Web大并发集群部署
Linux云计算网站集群架构之存储篇
Linux常用服务器部署实战