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

13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?

文档的重要作用,查文档弄明白输出不符合常识的情况
进程和内存报告内容都是即时数值
第一行数据是系统启动以来的平均值,其他行是设置的间隔时间的平均值
在案例中增加参数指定块设备,方便使用
机器配置和磁盘类型的差异会导致不同表现
pidstat输出显示stress线程大部分时间消耗在等待CPU上
上下文切换问题依然存在,表现为非自愿上下文切换增加
在单核机器上不会发生重调度中断
stress -i参数通过sync()来模拟I/O问题,但并不可靠
使用stress-ng代替stress来模拟iowait问题
可以查看proc文件系统获取所需指标
工具只是查找分析的手段,指标才是重点分析的对象
CentOS软件库里的sysstat版本较低,缺少%wait指标
问题5:性能工具输出中,第一行数据与其他行差别巨大
问题4:无法模拟出I/O性能瓶颈,以及I/O压力过大的问题
问题3:无法模拟出RES中断的问题
问题2:使用stress命令,无法模拟iowait高的场景
问题1:性能工具版本太低,导致指标不全
性能优化答疑

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

你好,我是倪朋飞。
专栏更新至今,四大基础模块之一的 CPU 性能篇,我们就已经学完了。很开心过半数同学还没有掉队,仍然在学习、积极实践操作,并且热情地留下了大量的留言。
这些留言中,我非常高兴地看到,很多同学已经做到了活学活用,用学过的案例思路,分析出了线上应用的性能瓶颈,解决了实际工作中的性能问题。 还有同学能够反复推敲思考,指出文章中某些不当或不严谨的叙述,我也十分感谢你,同时很乐意和你探讨。
此外,很多留言提出的问题也很有价值,大部分我都已经在 app 里回复,一些手机上不方便回复的或者很有价值的典型问题,我专门摘了出来,作为今天的答疑内容,集中回复。另一方面,也是为了保证所有人都能不漏掉任何一个重点。
今天是性能优化答疑的第一期。为了便于你学习理解,它们并不是严格按照文章顺序排列的。每个问题,我都附上了留言区提问的截屏。如果你需要回顾内容原文,可以扫描每个问题右下方的二维码查看。

问题 1:性能工具版本太低,导致指标不全

这是使用 CentOS 的同学普遍碰到的问题。在文章中,我的 pidstat 输出里有一个 %wait 指标,代表进程等待 CPU 的时间百分比,这是 systat 11.5.5 版本才引入的新指标,旧版本没有这一项。而 CentOS 软件库里的 sysstat 版本刚好比这个低,所以没有这项指标。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文是倪朋飞的答疑专栏,主要解答了读者在性能优化方面遇到的一些常见问题。作者提到了在使用性能工具时,版本较低可能导致指标不全的问题,但也指出了可以通过其他手段获取所需指标的方法。针对使用stress命令无法模拟iowait高的场景的问题,作者建议使用stress-ng命令来代替stress命令。此外,针对无法模拟出RES中断的问题,作者解释了重调度中断的机制,并指出了一些常见错误的观点。整篇文章涉及到了性能工具版本、I/O压力模拟和中断机制等技术内容,对于需要进行性能优化的读者来说,提供了一些有价值的解决问题的思路和方法。

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

全部留言(50)

  • 最新
  • 精选
  • ninuxer
    打卡day14 之前一直理解有误,感谢指出! pidstat 中, %wait 表示进程等待 CPU 的时间百分比。此时进程是运行状态。 top 中 ,iowait% 则表示等待 I/O 的 CPU 时间百分比。此时进程处于不可中断睡眠态。 等待 CPU 的进程已经在 CPU 的就绪队列中,处于运行状态;而等待 I/O 的进程则处于不可中断状态。

    作者回复: 👍

    2018-12-19
    4
    43
  • 念你如昔
    非常非常感谢,这钱花的值,之前没有对这些东西形成体系,老是感觉有力使不上的感觉,自从看了老师的文档,终于飘了,都想跳槽了?!。

    作者回复: 😢

    2018-12-19
    18
  • 微思
    老师,等待IO的不可中断进程是否一直占用CPU?

    作者回复: 不会,有其他需要CPU的进程运行时会切换过去

    2018-12-19
    8
  • 郭江伟
    课程很系统,把自己以前的知识都串起来了,后续争取每个案例自己都做一次,并且融合自己的经验改进下案例

    作者回复: 欢迎分享你的改进经验😊

    2018-12-19
    8
  • MoFanDon
    做了几年运维一直想要掌握,却了解的很零散。这段时间的课程让我学习很多,感谢老师。

    作者回复: 😊

    2018-12-19
    4
  • 我来也
    [D13打卡] 多谢老师提出来, pidstat 和 top 中的 %wait 含义并不一样. 之前只知道top是io的wait, 而新接触的pidstat的倒没有细想过. 确实是应该多man一下,看下命令文档. 刚开始要把工具用起来, 之后再查看命令的详细文档.

    作者回复: 嗯嗯,虽然专栏里也有不少使用案例,但并能包括所有细节的知识,这都需要查文档

    2018-12-19
    2
  • 大哈
    老师,您好,我想知道像pidstat这样的工具是怎么获取到这些性能数据的,我自己去开发应该从那里获取呢?

    作者回复: man 查询工具手册,一般都有介绍。一般数据都是来自 /proc、/sys 等

    2019-07-10
    1
  • 胡莉婷
    补充一点。我们的进程都是后台服务,机器1和机器2启动后都没有业务进来

    作者回复: 嗯 我的第一反应是负载不均匀,后台处理的业务是均匀的吗?

    2019-01-08
    2
    1
  • 胡莉婷
    老师你好,我们有个问题,还请给个思路。同样的应用程序,部署在两台机器上,比如机器1和机器2.。top发现机器2上进程数据段大小是机器1上数据段的10倍大。还有一个情况是机器2的进程(有上百个)启动后,比较集中在某一个cpu上,而机器1上我们的进程分布就比较均匀。还请指点一下

    作者回复: 数据段的问题可以对比分析下内存的差别,看看哪里不一样。 调度的问题可能跟内核参数(比如NUMA)、系统上其他进程的运行或者进程在等待的资源有关,试试从这几个方面看看?

    2019-01-08
    1
  • dexter
    [root@localhost ~]# docker run --name phpfpm -itd --network container:nginx feisky/php-fpm flag provided but not defined: --network See 'docker run --help'. [root@localhost ~]# docker version Client version: 1.7.1 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 786b29d/1.7.1 OS/Arch (client): linux/amd64 Server version: 1.7.1 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 786b29d/1.7.1 OS/Arch (server): linux/amd64 centos6.10 安装发现没有--network参数

    作者回复: centos6有点太老了,你用的docker 1.7选项跟新版不一样,—net。推荐升级到centos7实践,否则很多工具的支持、安装、使用方法都会不同

    2018-12-20
    1
收起评论
显示
设置
留言
50
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部