首页 > 系统相关 >linux 性能自我学习 ———— cpu 高怎么办 [三]

linux 性能自我学习 ———— cpu 高怎么办 [三]

时间:2023-06-01 20:11:28浏览次数:32  
标签:10000 perf 自我 时间 linux 进程 使用率 cpu

前言

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 

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

标签:10000,perf,自我,时间,linux,进程,使用率,cpu
From: https://www.cnblogs.com/aoximin/p/17450076.html

相关文章

  • linux 递归和函数实验
     递归  作用:自己调用自己 1.例子:阶乘    2.遍历目录下所有文件  函数 1.函数能够接受一个参数,参数为用户名;判断一个用户是否存在如果存在,就返回此用户的shell和UID;并返回正常状态值;如果不存在,就说此用户不存在;并返回错误状态值;  2......
  • windows cmd使用ssh连接Linux以及文件上传
    CMD连接服务器命令(47.102.144.221为服务器IP)[email protected]文件上传(scp后面参数为本地文件地址,47.102.144.221为服务器IP,冒号后面指将文件上传到服务器哪个目录下)scpD:\[email protected]:/server/tmp如何要从服务器下载文件还是使用scp命令如下:sc......
  • Linux如何查看JDK的安装路径
    whichjava首先要申明一下whichjava是定位不到安装路径的。whichjava定位到的是java程序的执行路径。[root@localhost~]#whichjava/usr/bin/java[root@localhost~]#ls-lrt/usr/bin/javalrwxrwxrwx.1rootroot22Aug1715:12/usr/bin/java->/etc/alternatives......
  • linux for循环
    目录一、单层for二、双层for三、实验            一、单层for    格式:      1.第一种格式foriin变量($(cat/1.txt)或者{1..10})      dodone2.第二种格式for((i......
  • Linux 系统升级node18
    解决/lib64/libc.so.6:versionGLIBC_2.28‘notfound解决方案:升级glibc到2.28版本wgethttps://mirror.bjtu.edu.cn/gnu/libc/glibc-2.28.tar.xztar-xfglibc-2.28.tar.xz-C/usr/local/cd/usr/local/glibc-2.28/mkdirbuildcdbuild/../configure--prefix=/usr/lo......
  • arm-linux的TFTP 服务器搭建和测试
    这里并不会费劲的去介绍TFTP协议,那个意义不大,主要是教大家如何操作,在这个过程中进步。网络协议非常复杂,完整的网络协议一个人将资料看一遍,估计这辈子就过去了。在这个庞大的网络工程中,不同的工程师分别做不同的工作,作为嵌入式linux工程师,要做的就是拿别人做好的东西移植,在嵌......
  • linux pipe 无名管道
    管道的概念:管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质:1.其本质是一个伪文件(实为内核缓冲区)2.由两个文件描述符引用,一个表示读端,一个表示写端。3.规定数据从管道的写端流入管道,从读端流出。管道......
  • linux命名管道
    管道是进程间通信的主要手段之一。一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端。管道是一种特殊的文件,它不属于某一种文件系统,而是一种独立的文件系统,有其自己的数据结构。根据管道的适用范围将其分为:无名管道和命......
  • linux消息队列
    经典进程间通信机制(IPC):管道、FIFO、消息队列、信号量以及共享储存。这些机制允许在同一台计算机上运行的进程可以相互通信。但是当考察到不同计算机(通过网络相连)的进程相互通信时就必须借助网络通信机制(networkIPC),在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境......
  • VMware中安装Linux-kali
    VMware中安装Linux-kali(详细图文教程)萌褚于2022-05-2010:33:30发布9499收藏94文章标签:Linux版权华为云开发者联盟该内容已被华为云开发者联盟社区收录加入社区镜像下载、域名解析、时间同步请点击阿里云开源镜像站一,VMware配置。  因为要装kali,所以要用到Debian......