首页
技术小册
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性能优化实战
### 19 | 案例篇:为什么系统的Swap变高了(上) 在Linux系统运维的广阔领域中,性能优化始终占据着核心地位。当系统的Swap(交换空间)使用率异常升高时,这往往是系统性能瓶颈或资源分配不均的显著信号。本章节将深入探讨“为什么系统的Swap变高了”这一问题的多种可能原因,并通过实际案例分析,帮助读者理解其背后的原理与解决方案。我们将从系统资源监控、进程行为分析、内存管理策略等多个维度出发,逐步揭开Swap高使用的迷雾。 #### 1. Swap空间概述 首先,简要回顾Swap空间的基本概念。Swap是Linux系统下的一种虚拟内存技术,当物理内存(RAM)不足以满足系统需求时,操作系统会将部分暂时不用的内存数据交换到磁盘上的Swap空间中,以释放物理内存供其他进程使用。虽然Swap机制在一定程度上缓解了内存不足的问题,但频繁使用Swap会极大降低系统性能,因为磁盘I/O速度远不及内存访问速度。 #### 2. 监控Swap使用情况 在探究Swap变高的原因之前,我们需要先学会如何监控Swap的使用情况。常用的命令包括`free`、`vmstat`、`top`以及`sar`等。 - **free命令**:直接显示物理内存、Swap、缓存等的使用情况。关注“Swap”行的“used”列可了解当前Swap使用情况。 - **vmstat命令**:提供关于系统活动、内存、分页、块I/O、中断和CPU活动的信息。通过观察“swpd”、“si”(每秒从磁盘读入swap的数量)、“so”(每秒写入swap的数量)等指标,可以判断Swap的活跃程度。 - **top命令**:实时显示系统中各个进程的资源占用情况,虽然不直接显示Swap使用情况,但通过观察内存占用高的进程,可以间接分析Swap升高的原因。 - **sar命令**:系统活动报告工具,用于收集、报告或保存系统活动信息。通过`sar -r`可以观察一段时间内的内存和Swap使用情况变化。 #### 3. 案例分析:Swap变高的原因(上) ##### 3.1 内存泄漏 内存泄漏是导致Swap使用率持续升高的常见原因之一。当应用程序未能正确释放不再使用的内存时,这些内存会逐渐积累,最终导致物理内存耗尽,系统不得不依赖Swap来继续运行。 **症状识别**: - Swap使用率持续上升,即使系统空闲时也不见下降。 - 特定进程或一组进程的内存占用持续增长。 - 系统响应变慢,特别是与内存密集型操作相关的应用。 **解决方案**: - 使用工具如`valgrind`、`memleak`等进行内存泄漏检测。 - 升级或更换存在内存泄漏的应用软件。 - 定期重启服务或系统,以清除累积的内存泄漏(非根本解决方案,仅作为临时措施)。 ##### 3.2 进程内存占用过大 某些进程可能由于设计缺陷或配置不当,导致它们占用了远超其正常需求的内存资源。当多个这样的进程同时运行时,系统很快就会耗尽物理内存,触发Swap使用。 **症状识别**: - 特定进程或少数几个进程占用大量内存。 - Swap使用率在特定时间或操作后急剧上升。 - 系统性能明显下降,尤其是当尝试启动新进程或执行大内存操作时。 **解决方案**: - 分析并优化这些进程的内存使用策略。 - 增加物理内存或减少不必要的内存密集型应用。 - 使用`ulimit`等工具限制进程可使用的最大内存量。 ##### 3.3 缓存策略不当 Linux系统为了提高性能,会利用空闲内存来缓存文件系统和磁盘I/O操作的数据。然而,如果缓存策略设置不当,或者系统对缓存的需求远远超过了物理内存的实际容量,也可能导致Swap使用率上升。 **症状识别**: - Swap使用率在系统空闲时也会保持在一个较高水平。 - 缓存(Cache)和缓冲区(Buffers)占用了大量物理内存。 - 系统整体运行流畅,但Swap使用率偏高。 **解决方案**: - 调整`/proc/sys/vm/swappiness`参数,减少系统对Swap的依赖。较低的swappiness值会让内核更倾向于使用物理内存而非Swap。 - 清理不必要的缓存,虽然Linux内核会自动管理缓存,但在某些情况下手动清理(如使用`sync; echo 1 > /proc/sys/vm/drop_caches`)可能有助于释放内存。 #### 4. 深入分析与诊断 除了上述直接原因外,Swap变高还可能与其他复杂的系统行为或配置问题相关。为了更准确地诊断问题,可以进一步使用如下方法: - **strace**:跟踪系统调用,观察进程是如何与系统资源交互的。 - **perf**:性能分析工具,用于分析CPU和系统的性能瓶颈。 - **systemtap**:动态跟踪工具,允许在运行时插入探针以收集系统信息。 通过这些工具,我们可以深入到系统内部,观察并分析导致Swap使用率升高的具体行为,从而制定更有针对性的优化策略。 #### 结语 本章从Swap空间的基本概念出发,通过监控工具的使用和案例分析,探讨了系统Swap变高的几种常见原因及其解决方案。然而,需要注意的是,每个系统都有其独特的环境和配置,因此在实际应用中,可能需要结合具体情况,综合运用多种手段进行诊断和优化。在下一章节中,我们将继续探讨Swap变高的其他可能原因及解决方案,以期为读者提供更加全面和深入的指导。
上一篇:
18 | 案例篇:内存泄漏了,我该如何定位和处理?
下一篇:
20 | 案例篇:为什么系统的Swap变高了?(下)
该分类下的相关小册推荐:
云计算那些事儿:从IaaS到PaaS进阶(四)
Web安全攻防实战(下)
分布式数据库入门指南
从零开始学微服务
Redis入门到实战
构建可视化数据分析系统-ELK
Linux云计算网站集群之nginx核心
云计算那些事儿:从IaaS到PaaS进阶(二)
人人都会用的宝塔Linux面板
DevOps开发运维实战
Redis数据库高级实战
Linux系统管理小册