前言

linux 性能分析自我学习。

正文

一般我们说cpu,一般是什么高呢? 一般是指cpu 使用率高。

那么什么是cpu 使用率呢?

cpu 使用率 = 1- 空闲时间/总cpu 时间

平均cpu 使用率 = 1 -(new空闲时间 - old 空闲时间)/ (new总cpu时间 - old总cpu时间)

我们可以使用top 查看:

那么来看下这些参数的意义:

  1. user (通常为us), 用户态的时间。(不包含nice的时间,但是包含guest的时间)

  2. nice (ni) 表示低优先级用户态cpu 时间,也就是进程的nice 值被调整为1-19 之间的cpu 时间。 nice 值可取-20-19,数值越大,优先级越低。

  3. system (sys), 表示内核态cpu 时间。

  4. idle, 代表空闲时间。 注意,它不包含等待 i/o 的时间。

  5. iowait (通常为wa), 表示等待i/o的cpu 时间。

  6. irq(通常为hi),表示处理硬中断的cpu 时间

  7. softtirq(si), 表示处理软中断的cpu时间

  8. steal(st),表示该系统运行在虚拟机中的时候,被其他虚拟机占用的cpu时间。

  9. guest(通常缩写为guest), 代表虚拟化运行其他操作系统的时间,也就是运行虚拟机的cpu时间

  10. guest_nice(通常缩写为gnice),表示低优先级运行虚拟机的时间。

然后下面是进程占用cpu的时间,但是其中间并没有分为用户态使用率和内核态使用率

那么就需要使用pidstat:

那么我们怎么定位cpu 高到底是怎么造成的呢?

一般使用perf 这个工具。

如果使用perf top 看下,那么是怎么样的呢?

第一行包含3个数据, 分别是采样数, 事件类型event, 事件总数量。

第二行:

overhead, 是该符号的性能事件在所有采样中的比例,用百分号来表示

shared, 是该函数或指令所在的动态共享对象(dynamic shared object), 如内核,进程名,动态链接库名, 内核模块名等。

object, 是动态共享对象的类型,比如. 表示用户空间的可执行程序或者链接库,而k 表示内核空间

symbol, 是符号名,也是函数名。当函数未知时候,用十六进制地址表示。

还可以直接使用perf record 和 perf report。

perf record 将信息收集起来。

然后perf report 就打开记录进行分析。

一般我们定位到具体的pid的时候,那么会使用:

perf -g -p xxx

这个-g 表示了,调用关系。

然后一般我们的web 服务会进行压测。

一般使用ab。

ab -c 10 -n 10000 http://10.254.0.5:10000

这样去压测,如果压测吞吐很低,那么就应该分析性能问题。

实验

实验:cpu 很高,但是找不到cpu高的应用。

运行nginx:

docker run --name nginx -p 10000:80 -itd feisky/nginx:sp

运行php代码:

docker run --name phpfdm -itd --network container:nginx feisky/php-fpm:sp

curl 一下:

 curl http://192.168.62.136:10000

发现成功. 压测一下:

ab -c 100 -n 1000 http://192.168.62.136:10000/

ab 安装:

yum -y install httpd-tools

结果为:

每秒60多,有点小低了。

ab -c 5 -t 600 http://192.168.62.136:10000/

通过top 看一下cpu情况:

发现top 很高,但是进程cpu不高,这怎么说?

难道还有进程不占用cpu?

通过pidstat 查看一下:

cpu 也不高啊。

通过task 这一行看下,发现就绪队列有6个:

诡异的事情出现了,这一排居然没有发现6个就绪进程。

那么可能原因是什么呢?

  1. 进程在不停的崩溃重启,比如因为段错误等。 这时候,进程在推出后又被监控系统自动重启了。

  2. 这些进程是短时进程,也就是在其他应用内部通过exec 调用的外部命令。这些命令一般都只运行很短时间就会结束,你很难用top这种间隔比较长的工具发现。

用ps tree 查看一下:

yum -y install psmisc

这里可以看到php-fpm 中启动了stress,那么是不是stress的问题呢?

这个时候可以看代码,其实一般看错误日志就知道了。

这种排查方式比较慢,直接用perf比较好。

的确看到了stree,但是cpu 使用高还是kernel,内核方法。

perf record -g

等一段时间看下情况:

perf report

那么有没有其他短时进程监控能马上能查看到的呢? execsnoop.

centos 怎么安装呢?

下载:

https://github.com/brendangregg/perf-tools

一般我会下载zip,然后解压。

然后运行:

./perf-tools/perf-tools-master/bin/execsnoop

不可中断进程和僵尸进程。

linux 性能自我学习 ———— cpu 高怎么办 [三]的更多相关文章

  1. 【转】一文掌握 Linux 性能分析之 CPU 篇

    [转]一文掌握 Linux 性能分析之 CPU 篇 平常工作会涉及到一些 Linux 性能分析的问题,因此决定总结一下常用的一些性能分析手段,仅供参考. 说到性能分析,基本上就是 CPU.内存.磁盘 ...

  2. Db2性能:系统CPU高问题分析的一些思路

    Db2性能:系统CPU高问题分析的一些思路 1. 如何判断CPU高? 有很多操作系统的命令可以看出来,比如ps -elf,iostat, vmstat, top/topas, 2. 收集数据 CPU高 ...

  3. Linux 性能监控之CPU&内存&I/O监控Shell脚本2

    Linux 性能监控之CPU&内存&I/O监控Shell脚本2   by:授客 QQ:1033553122 思路: 捕获数据->停止捕获数据->提取数据 备注:一些命令的输 ...

  4. Linux 性能监控之CPU&内存&I/O监控Shell脚本1

    Linux 性能监控之CPU&内存&I/O监控Shell脚本1   by:授客 QQ:1033553122   #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`if ...

  5. linux性能问题(CPU,内存,磁盘I/O,网络)

    一. CPU性能评估 1.vmstat [-V] [-n] [depay [count]] -V : 打印出版本信息,可选参数 -n : 在周期性循环输出时,头部信息仅显示一次 delay : 两次输 ...

  6. 一文掌握 Linux 性能分析之 CPU 篇

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 平常工作会涉及 ...

  7. 深挖计算机基础:Linux性能优化学习笔记

    参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...

  8. 测网速 fping Linux查看网络即时网速 linux性能问题(CPU,内存,磁盘I/O,网络)

    Linux查看网络即时网速 fping 是ping 工具的加强版本 例出局域网中存活的主机 (Ubuntu apt-get装上  cnetos装不上) zzx@zzx11:~$ fping -a 19 ...

  9. Linux性能优化实战CPU篇之总结(四)

    一.分析CPU瓶颈 1,性能指标 a>CPU使用率 CPU使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同可以分为:用户CPU.系统CPU.等待I/O CPU.软中断和硬 ...

  10. Linux性能监测:CPU篇(转)

    http://os.51cto.com/art/201012/239880.htm CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 ...

随机推荐

  1. 青少年CTF-Crypto(新手版本2.0,无factor1)

    凯撒大帝的征讨之路 题目: lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a} 知识点:凯撒加密 我的题解: import base64 #shift得出移位多少,移位后 ...

  2. Java 四种不同的权限修饰

    private 私有属性 只在同一个包下 同一个类中可以调用 同一个包下,不同的类中,可以调用 缺省,保护(protected),公共(public)可以调用, 不同的包下的类中,继承关系,可以调用 ...

  3. C#---串口调试助手

    1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 usin ...

  4. 5、zookeeper应用场景-配置中心原理

    配置中心 使用 zookeeper的特性watcher监听器 工作中有这样的一个场景:数据库用户名和密码信息放在一个配置文件中,应用读取该配置文件,配置文件信息放入缓存 若数据库的用户名和密码改变时候 ...

  5. vue 下 placeholder 修改颜色

    input::placeholder{ color:#585c89 !important; }

  6. Kotlin 快速遍历File及子目录筛选指定类型文件

    原文: Kotlin 快速遍历File及子目录筛选指定类型文件 - Stars-One的杂货小窝 在做文件相关的app,经常会遇到筛选某个文件夹下的符合条件的文件对象,且要包含子文件夹,之前一直是自己 ...

  7. Android TextView设置某段文字可点击

    初次进入app,需要有个勾选隐私协议的UI,其中的隐私协议文字点击是可跳转到新页面对隐私协议机型展示 这里选择使用Android自带的SpannedString来设置TextView的文字内容即可设置 ...

  8. Handler屏障消息

    Handler 屏障消息 Handler Message 种类 Handler的Message种类分为3种: 普通消息 屏障消息 异步消息 同步消息 我们默认用的都是同步消息,即前面讲Handler里 ...

  9. 低代码平台前端的设计与实现(三)设计态画布DesignCanvas的设计与实现

    上一篇文章,我们分析并设计了关于构建引擎BuildEngine的切面设计.本文我们将基于BuildEngine所提供的切面处理能力,在CustomCreateElementHandle中通过一些逻辑, ...

  10. 3DCAT为3D应用在云端构筑一个可靠的家

    保护知识产权,一直是数字化长期关注的议题,如何保护应用内的数字化资产(文字.图片.音频.视频.模型)等,是当今行业的难题,只要运行在Windows环境的三维应用,都可能面临被破解提取出资产,为原创版权 ...