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性能优化实战
登录|注册

46 | 案例篇:为什么应用容器化后,启动慢了很多?

倪朋飞 2019-03-11
你好,我是倪朋飞。
不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU、内存、文件系统和磁盘 I/O、以及网络的性能分析和优化。相信你已经掌握了这些基础模块的基本分析、定位思路,并熟悉了相关的优化方法。
接下来,我们将进入最后一个重要模块—— 综合实战篇。这部分实战内容,也将是我们对前面所学知识的复习和深化。
我们都知道,随着 Kubernetes、Docker 等技术的普及,越来越多的企业,都已经走上了应用程序容器化的道路。我相信,你在了解学习这些技术的同时,一定也听说过不少,基于 Docker 的微服务架构带来的各种优势,比如:
使用 Docker ,把应用程序以及相关依赖打包到镜像中后,部署和升级更快捷;
把传统的单体应用拆分成多个更小的微服务应用后,每个微服务的功能都更简单,并且可以单独管理和维护;
每个微服务都可以根据需求横向扩展。即使发生故障,也只是局部服务不可用,而不像以前那样,导致整个服务不可用。
不过,任何技术都不是银弹。这些新技术,在带来诸多便捷功能之外,也带来了更高的复杂性,比如性能降低、架构复杂、排错困难等等。
今天,我就通过一个 Tomcat 案例,带你一起学习,如何分析应用程序容器化后的性能问题。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • Adam
    这个问题应该是/proc 文件系统并不知道用户通过 Cgroups 给这个容器做了限制导致的。

    作者回复: 嗯嗯,正解!

    2019-03-11
    9
  • 腾达
    这里看java进程cpu的时候,使用了之前学到的perf record方法,但看docker内部函数名称的时候,还是遇到了问题,我的步骤如下:
    $ mkdir dockermap
    $ PID=$(docker inspect --format {{.State.Pid}} tomcat)
    $ sudo bindfs /proc/$PID/root dockermap
    $ sudo perf record -g -p $PID
    $ sudo perf report --symfs dockermap

    - 99.95% 0.00% java libjvm.so [.] 0x00000000008bf292
       - 0x8bf292
          - 67.44% 0xa79ff1
               0xa79af6
               0xa78677
               0xa7afc7
               0xa75d62
             + 0x8e6853

    作者回复: Java的问题请参考https://github.com/jvm-profiling-tools/perf-map-agent

    2019-03-12
    2
  • 悟空
    打卡,学习linux性能调优,顺带学习docker的基础知识,这案例太赞了
    2019-06-09
    1
  • Tony
    这个例子对稍微有点docker和jvm的基础的人还是太简单了。应该上点serverless冷启动的分析。cold start是FaaS一个很大的问题,不知道你怎么用前面的知识分析一下?谢谢

    作者回复: cold start话题太大了,涉及的不止是单机内的问题。你如果有具体的问题,可以分享出来,大家一起讨论

    2019-03-12
    1
  • xfan
    和虚拟机内存设置也有关系,老师的是8G 30%就很大,我的2G 所以不大,也不会引起OOM,当我调成8G 的时候就出现了和老师一样的现象了OOM

    作者回复: 嗯嗯 是这样的

    2019-03-12
    1
  • 我来也
    [D46打卡]
    看来真是有必要对容器做资源限制.
    刚开始分配的资源可以不要计算得那么精准,只要别把机器拖垮即可.

    实战篇还是很有意思,根据症状去找各种程序及系统日志和各项配置参数.

    如果不做特殊处理,容器内部看到的系统cpu/memory配置确实都是主机的.程序默认根据这个来做策略调整确实会受到误导.

    目前工作中还没使用容器,暂时还没法在容器中实战.😁
    2019-03-11
    1
  • ninuxer
    打卡day49
    前两天在我们线下环境一台docker宿主机上,一直无法create容器,后来看日志,发现有两个可疑之处:
    第一:docker日志显示socket文件损坏,但是当时运行其他docker管理命令能正常返回结果
    第二:宿主机上有个kworker/u80进程cpu利用率一直100%,最终是通过重启宿主机解决的~

    作者回复: 👍 谢谢分享

    2019-03-11
    1
    1
  • loser
    vm 开启了swap 导致 docker 容器的内存使用超过512m后还继续执行,没有被oom-kill。
    2019-11-19
  • 饭粒
    有个疑问,增加的 JVM 堆内存限制也是 512M 和 容器内存限制 512M 的一样,那还有非堆内存和其他的运行内存呢,这个可能还会有 OOM 吧?
    2019-09-22
  • z.l
    初学docker时解决的第一个问题就是没设置jvm的-Xmx导致oom的问题,前面的同事想当然的以为限制了容器内存也可以传递给jvm。
    2019-04-17
  • 如果
    DAY46,打卡
    2019-04-11
  • 小老鼠
    测试应用软件的性能(比如用LoadRunner 或JMter)可以在容器中进行吗?

    作者回复: 可以的

    2019-03-28
  • 腾达
    我的tomcat为什么不能实现oom?dmesg显示没有oom,进程也没有被杀死。我看有其他网友留言说要虚拟机内存设为8G,我的是设置为8G了。

    作者回复: 执行 docker exec tomcat java -XX:+PrintFlagsFinal -version | grep HeapSize 确认一下容器中java的堆内存?

    2019-03-12
  • ttxser
    值了
    2019-03-11
  • 夜空中最亮的星(华仔)
    很受启发,最近也在钻研docker 和k8s
    2019-03-11
  • rock04
    老师,今天工作做遇到一个平均负载的问题。8C的虚拟机。只有一个java进程,但是平均负载很高超过8.甚至达到12。查看CPU IO都很低 这个应该怎么排查
    2019-03-11
  • 且听风吟
    启动容器几分钟后,直接把宿主机跑死了,没法继续进行,这是怎么回事呢?

    作者回复: 主机内存多大?重启后可以看看系统日志,一般会有上次为啥死机的线索

    2019-03-11
收起评论
17
返回
顶部