Linux性能优化实战
倪朋飞
微软资深工程师,Kubernetes项目维护者
立即订阅
23395 人已学习
课程目录
已完结 64 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词 | 别再让Linux性能问题成为你的绊脚石
免费
01 | 如何学习Linux性能优化?
CPU 性能篇 (13讲)
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程序?
内存性能篇 (8讲)
15 | 基础篇:Linux内存是怎么工作的?
16 | 基础篇:怎么理解内存中的Buffer和Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的Swap变高了(上)
20 | 案例篇:为什么系统的Swap变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?
22 | 答疑(三):文件系统与磁盘的区别是什么?
I/O 性能篇 (10讲)
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 的区别和联系
网络性能篇 (13讲)
33 | 关于 Linux 网络,你必须知道这些(上)
34 | 关于 Linux 网络,你必须知道这些(下)
35 | 基础篇:C10K 和 C1000K 回顾
36 | 套路篇:怎么评估系统的网络性能?
37 | 案例篇:DNS 解析时快时慢,我该怎么办?
38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
40 | 案例篇:网络请求延迟变大了,我该怎么办?
41 | 案例篇:如何优化 NAT 性能?(上)
42 | 案例篇:如何优化 NAT 性能?(下)
43 | 套路篇:网络性能优化的几个思路(上)
44 | 套路篇:网络性能优化的几个思路(下)
45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?
综合实战篇 (13讲)
46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?
加餐篇 (4讲)
加餐(一) | 书单推荐:性能优化和Linux 系统原理
加餐(二) | 书单推荐:网络原理和 Linux 内核实现
用户故事 | “半路出家 ”,也要顺利拿下性能优化!
用户故事 | 运维和开发工程师们怎么说?
结束语 (1讲)
结束语 | 愿你攻克性能难关
Linux性能优化实战
登录|注册

20 | 案例篇:为什么系统的Swap变高了?(下)

倪朋飞 2019-01-04
你好,我是倪朋飞。
上一节我们详细学习了 Linux 内存回收,特别是 Swap 的原理,先简单回顾一下。
在内存资源紧张时,Linux 通过直接内存回收和定期扫描的方式,来释放文件页和匿名页,以便把内存分配给更需要的进程使用。
文件页的回收比较容易理解,直接清空缓存,或者把脏数据写回磁盘后,再释放缓存就可以了。
而对不常访问的匿名页,则需要通过 Swap 换出到磁盘中,这样在下次访问的时候,再次从磁盘换入到内存中就可以了。
开启 Swap 后,你可以设置 /proc/sys/vm/min_free_kbytes ,来调整系统定期回收内存的阈值,也可以设置 /proc/sys/vm/swappiness ,来调整文件页和匿名页的回收倾向。
那么,当 Swap 使用升高时,要如何定位和分析呢?下面,我们就来看一个磁盘 I/O 的案例,实战分析和演练。

案例

下面案例基于 Ubuntu 18.04,同样适用于其他的 Linux 系统。
机器配置:2 CPU,8GB 内存
你需要预先安装 sysstat 等工具,如 apt install sysstat
首先,我们打开两个终端,分别 SSH 登录到两台机器上,并安装上面提到的这些工具。
同以前的案例一样,接下来的所有命令都默认以 root 用户运行,如果你是用普通用户身份登陆系统,请运行 sudo su root 命令切换到 root 用户。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(33)

  • Free_fish
    用smem --sort swap命令可以直接将进程按照swap使用量排序显示

    作者回复: 👍 谢谢分享

    2019-01-04
    32
  • Geek_2b6807
    希望老师在用工具的时候能够使用对内核版本要求不高的,毕竟生产环境用较新内核的还是比较少
    2019-01-04
    18
  • 尘封
    $ swapoff -a && swapon -a,线上使用这个命令释放swap有什么风险吗?

    作者回复: 有的,使用了swap说明内存可能有压力了,这么强制换入有可能导致内存问题

    2019-01-04
    9
  • Scott
    答案不是上一讲有提到吗,就算设置为0,如果空闲内存+文件页 < page_low,还是会发生swap,这个值是设置swap的积极程度,就算最不积极,被逼无奈还是得swap的。

    作者回复: 👍 是的

    2019-01-04
    6
  • 流转千回
    打卡,老师这么晚还在更新专栏,致敬!
    2019-01-04
    2
  • Darrykinger.com
    对于sar以及其他的linux命令,如果出现列对的不整齐的时候,可以适当的参考文档,增加格式化输出,例如:sar的格式化输出:sudo sar -h --human -r -S 1 5
    free 可以添加 -h :free -h
    更容易让人理解

    作者回复: 谢谢分享👍

    2019-08-16
    1
  • 如果
    DAY20,打卡
    2019-01-31
    1
  • 仲鬼
    老师好,我研究man sar后还是没理解kbcommit,这个估计值具体指什么呢?
    就算单纯以不导致OOM的最小内存理解,为什么会小于kbmemused(已用物理内存)呢?我认为应该是kbcommit >= kbmemused。

    作者回复: kbcommit就是进程申请的内存之和,kbmemused还包括了buffer和cache

    2019-01-09
    1
  • 夜空中最亮的星(华仔)
    swappiness 使用的是默认配置的 60。如果把它配置为0 还会使用 swap 吗?
    会使用的 ,为0 是最大限度不用,不是一定不用。
    2019-01-04
    1
  • Days
    老师,请问如果关闭swap分区,swapping配置是不是无效的?

    作者回复: 是的

    2019-01-04
    1
  • ninuxer
    打卡day21
    按我的理解,swapness只是几率,并不意味着一定,所以还是会发生匿名页交换,只是几率小点
    2019-01-04
    1
  • 耿长学
    老师,最近遇到生产生一个问题,有点疑惑,从内存篇中了解到,内存回收有两种方式:1)kswapd进程通过/proc/sys/vm/min_free_kbytes中定义的值;2)通过内存回收脏页,判断是/proc/zoneinfo文件中定义的值。现在发现一个现象,剩余内存都大于两个文件中的pages_high,但是swap突然增大,这个是为什么呢?我的swappiness值是1,这种情况下内存回收是通过什么机制判断的呢?一直想不通
    2019-11-06
  • scorpiozj
    fallocate失败的可以看: http://t.cn/AiEBH7PC

    swapiness设置为0,理论上还是会发生;实际测试时 swap没有发生,也有可能是条件未触发导致。
    2019-09-17
  • Ethan
    遇到类似的情况.
    虚拟机,CentOS 7.4,4G内存,1G SWAP大小,swappiness设置为60,执行dd,swap没有什么变化.
    2019-09-16
  • 风清扬
    为何我试用watch -d grep -A 15 'Normal' /proc/zoneinfo之后输出全是0呀???
    2019-09-12
  • 美美
    Jvm设置和物理内存一样大小,为啥swap使用比较多?
    2019-09-05
  • 幸运的人
    老师,问一个问题
    现在的公有云主机或者是私有云的虚拟机,swap默认是0,这种情况下是否还会出现swap in和swap out呢?我在留言中也看到其他同学问过相似的问题,但没有看到答案,请帮忙解释一下?谢谢。

    作者回复: 嗯,云环境一般都是关闭swap,避免恍如换出带来的性能问题

    2019-05-30
  • Adam
    ES 可以通过设置锁定内存。
    2019-03-06
  • zshanjun
    大文件读取瞬间完成,没有观察到内存的变化:
    root@linux-1:~/go/bin# dd if=/dev/sda1 of=/dev/null bs=16G count=2048
    0+1 records in
    0+1 records out
    1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00693471 s, 151 MB/s

    作者回复: 仔细看看,1048576 bytes (1.0 MB, 1.0 MiB) copied

    2019-01-15
    1
  • berryfl
    /proc/*/status会匹配到self之类的特殊目录,把匹配的部分写复杂点可以限制到仅数字,例如+([0-9])

    作者回复: 嗯,是的

    2019-01-10
收起评论
33
返回
顶部