Linux 性能优化实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
87258 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
结束语 (1讲)
Linux 性能优化实战
15
15
1.0x
00:00/00:00
登录|注册

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

内存限制
OOMKilled
容器退出原因
容器状态
pidstat命令
top命令
CPU限制调整
CPU限制影响
JVM堆内存配置
JVM堆内存大小
容器启动失败
容器拉取镜像
预先安装工具
机器配置
CPU限制调整
JVM资源配置
其他组件影响
文件系统、网络协议栈隔离
cgroups影响
性能分析工具
CPU限制
JVM堆内存配置
容器启动
容器配置
实战演练
分享经验
解决思路
分析方法
性能问题解决
容器化性能分析
Tomcat案例
交流分享
容器性能问题
性能分析方法
容器化后性能问题
思考
性能问题分析

该思维导图由 AI 生成,仅供参考

你好,我是倪朋飞。
不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU、内存、文件系统和磁盘 I/O、以及网络的性能分析和优化。相信你已经掌握了这些基础模块的基本分析、定位思路,并熟悉了相关的优化方法。
接下来,我们将进入最后一个重要模块—— 综合实战篇。这部分实战内容,也将是我们对前面所学知识的复习和深化。
我们都知道,随着 Kubernetes、Docker 等技术的普及,越来越多的企业,都已经走上了应用程序容器化的道路。我相信,你在了解学习这些技术的同时,一定也听说过不少,基于 Docker 的微服务架构带来的各种优势,比如:
使用 Docker ,把应用程序以及相关依赖打包到镜像中后,部署和升级更快捷;
把传统的单体应用拆分成多个更小的微服务应用后,每个微服务的功能都更简单,并且可以单独管理和维护;
每个微服务都可以根据需求横向扩展。即使发生故障,也只是局部服务不可用,而不像以前那样,导致整个服务不可用。
不过,任何技术都不是银弹。这些新技术,在带来诸多便捷功能之外,也带来了更高的复杂性,比如性能降低、架构复杂、排错困难等等。
今天,我就通过一个 Tomcat 案例,带你一起学习,如何分析应用程序容器化后的性能问题。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过一个Tomcat应用的案例,介绍了应用容器化后可能出现的性能问题,并演示了如何分析和解决这一问题。作者首先准备了案例环境,基于Tomcat的官方镜像构建了一个简单的Tomcat应用,并推送到Docker Hub。然后,作者演示了如何使用docker run命令启动Tomcat应用,并发现Tomcat服务并不能正常响应客户端请求,通过查看容器的日志发现Tomcat还在启动过程中。最后,作者提到了一些关于Docker镜像下载和运行的注意事项。文章内容简洁清晰,适合读者快速了解应用容器化后启动慢的原因及分析方法。通过实际案例,读者可以了解到应用容器化后可能出现的性能问题,并学习到相应的分析方法和解决思路。文章通过详细的命令演示和问题分析,帮助读者更好地理解容器化应用中可能出现的性能问题,并提供了解决方案,对于需要进行应用容器化的开发人员和运维人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(26)

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

    作者回复: 嗯嗯,正解!

    2019-03-11
    3
    24
  • 腾达
    这里看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
    5
  • Tony
    这个例子对稍微有点docker和jvm的基础的人还是太简单了。应该上点serverless冷启动的分析。cold start是FaaS一个很大的问题,不知道你怎么用前面的知识分析一下?谢谢

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

    2019-03-12
    5
  • 且听风吟
    启动容器几分钟后,直接把宿主机跑死了,没法继续进行,这是怎么回事呢?

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

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

    作者回复: 嗯嗯 是这样的

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

    作者回复: 👍 谢谢分享

    2019-03-11
    2
    2
  • 小老鼠
    测试应用软件的性能(比如用LoadRunner 或JMter)可以在容器中进行吗?

    作者回复: 可以的

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

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

    2019-03-12
    2
    1
  • 饭粒
    有个疑问,增加的 JVM 堆内存限制也是 512M 和 容器内存限制 512M 的一样,那还有非堆内存和其他的运行内存呢,这个可能还会有 OOM 吧?
    2019-09-22
    4
    13
  • Goal
    打卡,学习linux性能调优,顺带学习docker的基础知识,这案例太赞了
    2019-06-09
    6
收起评论
显示
设置
留言
26
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部