性能分析-CPU知识

目录

CPU知识

cpu组成

查看cpu信息:

top命令中 cpu相关:

top命令看到系统负载: CPU负载 + IO负载

上下文: CPU的寄存器和程序计数器----在cpu的控制器中

实战演示分析

top命令分析

arthas工具

进程上下文切换高的问题分析

stress-ng 工具定位

分析

top

vmstat

pidstat -w 1

线程上下文切换的问题分析

stress-ng 工具定位

分析

top

vmstat

pidstat -w 1

IO密集型导致服务器负载高

stress-ng 工具定位

分析

top

vmstat 1

iostat -dx 1

监控平台

grafana + promethues 监控模板界面不显示数据


CPU知识


选择: 架构、核、主频

cpu组成

控制单元 、计算单元、存储单元

查看cpu信息:

  • top
  • lscpu
  • cat /proc/cpuinfo

top命令中 cpu相关:

  • top命令中的 进程列表中,是根据cpu的使用率从高到低。所以使用top进行性能分析时,如果 cpu使用率高,可以首先分析top命令中进程列表中 cpu使用率最高的第一个进程。
  • us\sy 非内核态(用户态)\内核态(系统态)
    • us: 逻辑运算
    • sy: 底层计算
    • 如果现在 top命令中,cpu使用率高的第1个进程,是一个 应用程序。此时再看 us、sy。
      • us高: 应该是 应用程序的 逻辑运算 频繁 ------代码有问题
    • 如果 现在top命令中,cpu使用率高的第1个进程是一个数据库程序。此时再看 us、sy。
      • us高: sql语句执行逻辑很复杂 -----sql有问题
      • sy高: 读写磁盘操作

top命令看到系统负载: CPU负载 + IO负载

  • sys高, =====> 怀疑===>上下文切换高 ======>pidstat====>自愿上下文切换高------可能是获取不 到足够的资源,----内存不足
  • sys高 =====》怀疑 =====》上下文切换=====》pidstat=====》非自愿上下文切换高 -----cpu不够用
  • us高 ====》业务逻辑有关 -----实现上存在、FGC、 CPU密集计算
  • si高 ====》 抢占资源 wa高 ===》 等资源 -----可能是内存,也可能是网络资源、外设资源、磁盘资源太慢

上下文: CPU的寄存器和程序计数器----在cpu的控制器中

  • 上下文切换发生在cpu的控制器中。 其实就是 cpu控制器中的指令的切换。

CPU上下文的切换,先保存前一个指令的资源到内核中,然后加载新的指令的资源,执行新的指 令

  • 这个过程有保存老的, 加载新的,所以它会占用CPU的时间。如果占用的总时间长,到cpu的 用 与计算的时间就少了。所以cpu运算速度就变慢,处理的 响应时间就变长了。

切换的指令,可以是同一个进程的,也可以是不同进程的

  • 同一个进程中上下文切换。
    • 进程是资源的拥有者。
    • 同一个进程中, 不同线程之间的切换。 只需要保存线程的私有的资源即可
  • 不同进程之间,上下文切换。
    • 保存 前一个进程的资源, 然后打开新进程的资源。

实战演示分析

现在讲的CPU,cpu是硬件设备。要进行性能分析可以使用性能分析命令,也可以使用监控平台。

  • 先用 命令分析
  • 再用 监控平台来分析

把xxxxx项目启动

对 获取验证码 接口 进行性能测试

top命令分析

  • top进程列表中, cpu使用率最高的java进程
    • 知道 java进行的 pid
    • ps -ef |grep pid 找 找到 具体java进程 -----判断出,到底是哪个java进程,导致的cpu使用
  • cpu的总的使用率数据中,显示 总和 接近100%, us态是最高的
    • 代码逻辑有问题
  • 结论: xxxxx项目,在获取验证码接口上,存在性能问题,代码逻辑可能有问题。

arthas工具

是阿里开源的 java项目的性能分析工具。

  • 定位:
    • arthas: 下载到 xxxx项目机器上   curl -O https://arthas.aliyun.com/arthas-boot.jar
    •  使用 java -jar arthas-boot.jar 启动arthas
      • 显示出,所有的java进程列表
      • 选择你要分析的java进程的id的 序号 回车, 就自动连接到 你要连接到java进程
      • 查看帮助信息thread --help
  • thread -n 数字 ------获取到了 cpu使用率最高的几个线程栈信息
    • 如果你看不懂, 你把这个线程栈信息,给 java开发人员,让他们定位。
    • 自己看线程栈信息,找到 项目工程的 代码类和行
      • at
      • com.lemon.lemon_erp.controller.CodeController.getCode(CodeController.j ava:67)

进程上下文切换高的问题分析

stress-ng 工具定位

进程: 在一台机器上 有多个进程

使用 stress-ng 工具,来模拟产生大量的 进程,然后相互竞争,造成性能现象,模拟在企业服 务器中 多进程的情况。

yum install epel-release.noarch

yum update -y

yum install stress-ng -y

命令 nproc 获取系统cpu的数量

((proc_cnt = `nproc`*10)); stress-ng --cpu $proc_cnt --pthread 1 --timeout 120s

分析

top
  • 进程列表中,cpu使用率最高的一些进程的名称相同; cpu的 us态值最高 sy也有增大; loadaverage 非常大。
    • 进程名称相同,怀疑是在抢cpu资源----想到 vmstat

vmstat
  • procs中r队列的值,有明显的数据变化。
  • 有大量的进程在抢占cpu资源。 -------cpu不够,是性能瓶颈。
  • 内存中,free有稍微变少,cache有变大,buff基本没变
  • bi bo si so 没有明显的变化
  • system中的 in 变化比较小, cs变化非常大。-----上下文切换非常大。

pidstat -w 1
  • cswch/s 自愿上下文切换要大一些 nvcswch/s 也有明显的数,相对来说小一些。

当系统出现 了进程上下文过多导致的性能问题,通过top命令和vmstat命令和pidstat命令,看到现象就如上。

这个问题,怎么解决?

  • 加cpu,但是实际中,加cpu数量,是不方便。
  • 减少进程(迁移一些进程到另外的服务器上、或者调整项目代码配置,减少启动的进程数量)

线程上下文切换的问题分析

一个进程: 就是一个程序、一个服务、一个项目, 进程是资源的拥有者。

线程: 是进程的工作者。 一个进程是可以有多个线程的。

线程上下文切换:

同一个进程中,多个线程之间的切换

不同进程间,线程的切换 ------类似 进程切换

stress-ng 工具定位

stress-ng --cpu `nproc` --pthread 10 --timeout 120

分析

top

系统负载升高、CPU的使用情况中 us和sy都有值、si也有值,sy要比us大。进程列表中先了 多个项目的名称。

vmstat

proc中 r列有明显的数据变化,b列没有变化,free有变小,cache变大,in、cs有数据变化, 但是 cs变化的很明显(上下文切换)。

pidstat -w 1

看到每一个线程的 cswch/s 自愿上下文切换的数据都比较大, 每个线程的非自愿nvcswch/s上下文切换数据比较小的。

进程上下文切换线程上下文切换
topus大,sy小us小,sy大
vamstat 1 proc列的r数据大 、cs数据大proc列的r数据大、cs数据大
pidstat -w 1 ,总的进程的自愿上下文大,每个进程的自愿上下文小,每个进程的非自愿上下文切换大。每个线程的自愿上下文切换是 大的,非自愿上下文切换小

这种问题怎么解决?

  • 少启动一些线程:
    • 修改进程中,启动的线程数的配置 ------ 最大值,由服务所在的机器或容器的CPU核数来定
    • 在服务器上,少启用一些服务\进程,迁移一些进程到其他服务器上面。

IO密集型导致服务器负载高

  • 系统负载高,由两部分组成: CPU负载高、 IO负载高 io负载高,
  • top命令看得时候,cpu的使用率中 wa 值
  • 如果 CPU使用率中wa值比较大,这种情况大概率就是 IO性能问题
  • io负载: 磁盘负载 、 网络负载、外设负载
    • 如果是网络负载慢: 可能就是网卡或者是带宽
      • 网卡: 一般情况下 都是千兆网卡 ------一般情况下,网卡速度不会成为瓶颈
    • 外设:
      • 磁盘: 读写使用率 IOPS 模拟,系统IO使用率高,导致的性能瓶颈的分析
  • 模拟,系统IO使用率高,导致的性能瓶颈的分析
    • 什么现象,说明磁盘的io成为了性能瓶颈?

stress-ng 工具定位

stress-ng -i 6 --hdd 1 --timeout 120

分析

top

sy、wa、si 这三个值,跳跃性的成为最大值。

  • sy cpu的内核进程计算 读写磁盘是发生在内核中
  • wa 等待数据
  • si 软中断

vmstat 1

proc的r队列有变化不明显; free表小,cache 变大了, bi、bo有明显的数据

bi bo 是磁盘操作-----怀疑是磁盘瓶颈

iostat -dx 1

await有明显的数据,说明有明显的磁盘等待。

使用这个命令不要过于频繁或时间过长。执行这个命令很明显的等待,操作会很卡,持续操作的话,可能导致 机器宕机。

问题解决办法

  • 磁盘成为了瓶颈
    • 换磁盘: 应用服务器换固态硬盘
    • 减少IO操作: 应用服务器,写日志,是应用服务最常见的磁盘操作
      • 减少日志: 提高日志级别,日志级别越高,日志量越少。
      • 日志文件拆解:如 根据日志文件大小拆解
    • 数据库服务器的磁盘瓶颈

监控平台

监控服务器硬件资源: grafana + Prometheus + node_exporter

  • grafana
  • prometheus 时序数据
  • node_exporter: Prometheus收集硬件资源的收集器
    • 如果你想要收集信息,就选择用不同的
    • exporter exporter不同,就可以收集不同的资源(硬件资源、服务资源)

grafana、Prometheus,不会安装在被监控服务器上。 exporter 会安装到 被监控的机器上。要收集多 个机器,每个机器上都放置 exporter

node_exporter的 默认端口: 浏览器http协议可以访问端口 9100

  • 启动 ./node_exporter

Prometheus可浏览器http协议访问的端口: 9090

  • 配置文件 prometheus.yml 要注意格式
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.130.133:9100']
  • ./prometheus

启动grafana: systemctl restart grafana-server

http://grafana的ip:3000 admin admin

选择添加 Prometheus数据源

  • 注意: 数据源添加url: http://prometheus的ip:9090

引入模板: import 12884

  • 注意: 数据源,要选择你上面添加的 数据源的名称

grafana + promethues 监控模板界面不显示数据

  • Prometheus 与 node_exporter机器 网络不通
  • Prometheus的机器的 时间 与 node_expoter机器的时间 相差特别大
    • 隔8小时 把grafana的模板界面右上角的时间 拉长8小时以上--出现数据
  • 界面模板的界面 左上角 信息没有出来 ---可以手动填,不是所有的都会带出来
  • 有修改 hosts文件(系统名未改,大部分公司已经改了的)
    • /etc/hosts文件中
      • 没有填写主机名网络请求时,有的会要读取这个文件中主机名,读不到会导致网络延迟非常大。

搭建环境详见:Linux集群监控部署: prometheus 普罗米修斯 + Grafana(超详细)_监控 普罗米修斯和gra-CSDN博客文章浏览阅读1.1w次,点赞12次,收藏130次。前言之前我们有用到top、free、iostat等等命令,去监控服务器的性能,但是这些命令,我们只针对单台服务器进行监控,通常我们线上都是一个集群的项目,难道我们需要每一台服务器都去敲命令监控吗?这样显然不是符合逻辑的,Linux中就提供了一个集群监控工具 – prometheus。..._监控 普罗米修斯和grahttps://blog.csdn.net/weixin_43865008/article/details/118946362

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/599175.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】StableDiffusion的组件解析,运行一些基础组件效果

文章目录 前言vaeclipUNetunet训练帮助、问询 前言 看了篇文: https://zhuanlan.zhihu.com/p/617134893 运行一些组件试试效果。 vae 代码: import torch from diffusers import AutoencoderKL import numpy as np from PIL import Image# 加载模型…

[AIGC] Spring 获取前端请求参数的全面指南

在Spring框架中,我们有多种方式可以获取前端发来的请求参数。以下是一些常用的方法: 文章目录 1. 通过RequestParam注解2. 通过HttpServletRequest对象3. 通过PathVariable注解4. 通过ModelAndView对象5. 通过WebRequest对象 1. 通过RequestParam注解 使…

neo4j图数据库下载安装配置

neo4j下载地址Index of /doc/neo4j/3.5.8/ 1.说明:jdk 1.8 版本对应的 neo4j 数据库版本 推荐安装3.X版本 2.配置系统环境变量 3.启动 neo4j.bat console 4.访问

算法设计与分析(实验5)-----图论—桥问题

一.实验目的 掌握图的连通性。掌握并查集的基本原理和应用。 二.实验步骤与结果 1.定义 (1)图的相关定义 图:由顶点的有穷非空集合和顶点之间的边的集合组成。 连通图:在无向图G中,若对于…

为什么苹果 Mac 电脑需要使用清理软件?

尽管 Apple Mac 电脑因其卓越的性能、简洁高效的 macOS 操作系统及独特的美学设计备受全球用户青睐,但任何电子设备在长期使用后都难以避免面临系统资源日渐累积的问题。其中一个重要维护需求在于,随着使用时间的增长,Mac电脑可能会由于系统垃…

xss基础

第一关&#xff1a; html部分标签可以解析js <script>alert (1)</script> 第二关&#xff1a; 可以看到value用双引号闭合了&#xff0c;使用上一关的payload没用&#xff0c;尝试一下闭合这个input 所以使用双引号和>闭合后再加入上一关的payload 11"…

深入浅出 -- 系统架构之负载均衡Nginx缓存机制

一、Nginx缓存机制 对于性能优化而言&#xff0c;缓存是一种能够大幅度提升性能的方案&#xff0c;因此几乎可以在各处都能看见缓存&#xff0c;如客户端缓存、代理缓存、服务器缓存等等&#xff0c;Nginx的缓存则属于代理缓存的一种。对于整个系统而言&#xff0c;加入缓存带来…

机器学习(30)

文章目录 摘要一、文献阅读1. 题目2. abstract3. 网络架构3.1 Sequence Generative Adversarial Nets3.2 SeqGAN via Policy Gradient3.3 The Generative Model for Sequences3.4 The Discriminative Model for Sequences(CNN) 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过…

GaN肖特基势垒二极管(SBD)的多阴极应用建模与参数提取

GaN Schottky Barrier Diode (SBD) Modeling and Parameter Extraction for Multicathode Application&#xff08;TED 24年&#xff09; 摘要 本文提出了一种适用于多阴极应用的紧凑型可扩展GaN肖特基二极管大信号模型。详细给出了外在和内在模型参数的可扩展规则。实验和理…

Tesseract 安装与配置及验证码识别

Tesseract 安装与配置 Tesseract 的使用&#xff0c;需要环境的支持&#xff0c;以实现简单的转换和训练。 1.环境 python版本&#xff1a;3.8.3 &#xff08;python2.7或3以上&#xff09; 操作系统&#xff1a;windows系统 2.Python安装 详见&#xff1a;Miniconda的…

ArcGIS Server 安装教程

​​​​​​​ 一、环境与文件准备 1.软件环境 已安装arcgis Desktop 10.2 2.安装及授权文件 二、安装步骤 1.下载安装包和授权文件&#xff0c;解压后打开ArcGIS Server10.2文件夹&#xff0c;打开ESRI.exe。 2.点击ArcGIS for Server后的Setup&#xff0c;开始安装。 3.…

【ArcGIS微课1000例】0108:ArcGIS计算归一化差值植被指数

本文讲解ArcGIS中,基于Landsat8数据的NDVI归一化差值植被指数计算。 文章目录 一、加载数据二、归一化植被指数NDVI1. NDVI介绍2. NDVI计算三、注意事项一、加载数据 加载配套数据0108.rar中的Landsat8的8个单波段数据,如下所示: Landsat8波段信息对照表如下表所示: 接下来…