当前位置: 首页 > news >正文

perf 排查高延迟

高延迟的 2 个场景,触发 perf 录包思路

 当前 perf 没有常驻内存,后续提供 perf 常驻内存功能。且 perf 启动需要 0.5~1s,所以,存在 2 个场景

1.频繁连续高延迟(复现后的几秒内,继续频繁复现):可以配置自动触发工具,自动触发 perf trace 记录函数耗时,或 perf record 记录 cpu 火焰图。

2.出现一次后,过好久才会复现第二次:需要一直开启 perf trace 或 perf record,直到复现高延迟。(后续 perf 常驻内存后,可同场景 1,使用自动触发工具解决)

场景 1,配置高延迟自动触发工具去抓包
 

场景 2,使用 root 用户,在 MAP 容器内执行如下命令,会一直抓包 6 小时。当抓到包后,需要用户手动杀掉该进程,停止抓包:

./trigger_perf_trace.sh loop

抓 perf trace 和 perf record 包脚本:

可以放到自己的目录下,例如放到:/home/mogo/data/shizhonghe/trigger_perf_trace.sh

#!/bin/bash -e

function trigger_once() {

    now_str=`date "+%Y%m%d_%H%M%S.%N"`

    date_str=`date "+%Y-%m-%d"`

    uptime=`cat /proc/uptime awk '{print $1}'`

    log_dir=/home/mogo/data/log/monitor_cpu_mem_net/${date_str}/szh_${now_str}

    pid=`ps -ef | grep '__name:=local_planning' grep -v grep awk '{print $2}'`

    mkdir -p ${log_dir}

    if "${pid}" != "" ] ; then

        perf trace -T -p ${pid} -o "${log_dir}/perf_trace_${pid}_${now_str}_${uptime}.log" sleep $1 &

    else

        echo "pid null" > ${log_dir}/perf_trace_${pid}_${now_str}_${uptime}.log

        sleep $1

    fi

    if which lsof /dev/nullthen

        lsof -Pn -p ${pid} > ${log_dir}/lsof_${pid}_${now_str}.log 

    fi

    wait

}

function main() {

    if "$1" == "loop" ] ; then

        local run_time=300

        for ((i=1; i<=72; i++))

        do

            trigger_once ${run_time}

        done

    elif "$1" == "trigger" ] ; then

        local run_time=5

        trigger_once ${run_time}

    else

        echo "param unmatched!"

    fi

}

main "$@"

使用 perf trace 还是 perf record?

1. perf trace:  linux 内核中存在一些埋点,这些埋点会记录内核 api 的时延信息。睡眠时延高(死锁了、io 操作多等),使用 perf trace 可以排查到

例如: perf trace 显示工作线程 write 函数写文件,耗时 30ms,此时说明写文件卡住了 30ms,此时一般是同步写文件了,需要改为异步写文件

            perf trace 显示工作线程中 futex wait 了 30ms,说明等待条件变量等待了 30ms

2.perf record 会对 cpu 采样,记录单个进程/多个进程/MAP 容器所有进程的, cpu 运行的函数样本,每个采样点都是一个堆栈,采集一段时间后,会得到很多堆栈,可以把这些堆栈合并到一起,即:火焰图

某个函数/进程的 cpu 占用率 = 该函数/进程的采样点数量 ÷ 总采样数量

如果某个模块
 

使用 perf trace 抓到数据后,如何找到高耗时 api

打印耗时 > 20ms 的内核 api

import sys

for line in  open(sys.argv[1],"r"):

    if "local_planning" not in line:

        continue

    l1 = line.split("(")

    if len(l1) > 1:

        l1 = l1[1]

    else:

        continue

    l2 = l1.split("ms):")

    if len(l2) > 1 :

        l2 = l2[0]

    else:

        continue

    tc = float(l2)

    if tc >= 20.0 and tc < 10000:

       print(line)

相关文章:

perf 排查高延迟

高延迟的 2 个场景&#xff0c;触发 perf 录包思路 当前 perf 没有常驻内存&#xff0c;后续提供 perf 常驻内存功能。且 perf 启动需要 0.5~1s&#xff0c;所以&#xff0c;存在 2 个场景 1.频繁连续高延迟&#xff08;复现后的几秒内&#xff0c;继续频繁复现&#xff09;&a…...

配置8188eu无线网卡的热点模式

下载驱动 github:8188eu的最新驱动&#xff0c;注意下载5.2.2.4分支 关于这一驱动&#xff0c;不要下载master分支&#xff0c;master分支代码较早&#xff0c;会导致以下两点问题&#xff1a; 1.STA模式下连接wifi信号较差时会卡死 2.无法启动AP模式 所以请务必下载5.2.2.4分…...

为什么 DDoS 攻击偏爱使用 TCP 和 UDP 包?

Distributed Denial of Service (DDoS) 攻击是指攻击者利用多个计算机系统或网络设备&#xff08;通常是被恶意软件感染的计算机&#xff0c;被称为“僵尸网络”&#xff09;来淹没目标服务器的资源&#xff0c;导致合法用户无法访问服务。TCP 和 UDP 是两种最常见的用于 DDoS …...

多址技术(FDMA,TDMA,CDMA,帧,时隙)(通俗易懂)

多址技术是一种区分用户的技术。 举个例子&#xff0c;一个基站发出信息&#xff0c;如何确定是发给谁的&#xff1f; 这个技术就是解决这个问题的。 多址技术常见的有三种&#xff1a; 频分多址&#xff08;FDMA&#xff09;、时分多址&#xff08;TDMA&#xff09;、码分…...

基于 KubeSphere 的 Kubernetes 生产环境部署架构设计及成本分析

转载&#xff1a;基于 KubeSphere 的 Kubernetes 生产环境部署架构设计及成本分析 前言 导图 1. 简介 1.1 架构概要说明 今天分享一个实际小规模生产环境部署架构设计的案例&#xff0c;该架构设计概要说明如下&#xff1a; 本架构设计适用于中小规模(<50)的 Kubernetes …...

RabbitMQ 入门篇

接上一篇《RabbitMQ-安装篇&#xff08;阿里云主机&#xff09;-CSDN博客》 安装好RabbitMQ后&#xff0c;我们将开始RabbitMQ的使用&#xff0c;根据官网文档RabbitMQ Tutorials | RabbitMQ&#xff0c;我们一步一步的学习。 1. "Hello World!" 这里先说明几个概…...

【赛事】2024第五届“华数杯”全国大学生数学建模竞赛

为了培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力&#xff0c;天津市未来与预测科学研究会、中国未来研究会大数据与数学模型专业委员会&#xff08;协办&#xff09;决定举办华数杯全国大学生数学建模竞赛。竞赛的目标是为培养大学生的科学精神及运用数学…...

DB管理客户端navicat、DBever、DbVisualizer数据库连接信息迁移

DB管理客户端Navicat、DBever、DbVisualizer数据库连接信息迁移 第三方数据库连接工具为了确保数据库信息安全通常对保存的数据库连接密码进行加密&#xff0c;填入后想再拿到原文就不可能了&#xff0c;有时交接给别人或者换电脑时可以通过连接数据导出的方式来解决。 Navic…...

CF 训练2

688 div2 C Balanced Bitstring 思路&#xff1a;首先对于区间问题 &#xff0c; 我们可以先思考让它滑动滑动。对于[l,r],向后滑动一位后 &#xff0c;[l1 , r1],因为两次的区间中 &#xff0c; [l1 ,r]中所有数都是相同的 &#xff0c; 所以 可以得到s[l] s[r1] &#xff0…...

内网隧道学习笔记

1.基础&#xff1a; 一、端口转发和端口映射 1.端口转发是把一个端口的流量转发到另一个端口 2.端口映射是把一个端口映射到另一个端口上 二、http代理和socks代理 1.http带那里用http协议、主要工作在应用层&#xff0c;主要用来代理浏览网页。 2.socks代理用的是socks协议、…...

Umi-OCR:功能强大且易于使用的本地照片识别软件

Umi-OCR是一款开源且免费的离线OCR&#xff08;光学字符识别&#xff09;软件&#xff0c;可让您轻松从照片中提取文本。它支持多种语言&#xff0c;并具有许多其他功能使其成为照片识别任务的绝佳选择。 Umi-OCR的优势 离线操作&#xff1a; Umi-OCR无需互联网连接即可工作&…...

HarmonyOS开发商城商品详情-底部导航

目录 一:功能概述 二:代码实现 三:效果图 一:功能概述 上一节我们实现了商品详情页基础信息展示,这一节主要实现底部立即购买和加入购物车的功能。首先我们需要在底部创建两个按钮,这两个按钮固定字底部,不随页面滚动。点击添加购物车按钮,会出现一个对话框,显示商…...

C语言 ——— 学习、使用 strcat函数 并模拟实现

目录 学习strcat函数​编辑 使用strcat函数​编辑 模拟实现strcat函数 学习strcat函数 strcat函数所需要的头文件&#xff1a; #include<string.h> strcat函数的参数解析&#xff1a; 将 source 字符串追加到 destination 字符串。destination 中的字符串结束标志…...

视频超压缩保持质量 ffmpeg

参考&#xff1a; https://x.com/mortenjust/status/1817991110544744764 基于 FFMpeg 的 H264 压缩标准&#xff0c;实现压缩 90% 的视频大小 在线体验地址&#xff1a; https://tools.rotato.app/compress ffmpeg命令执行 ffmpeg -i "C:\Users\loong\Downloads\屏幕录…...

大型语言模型入门

大型语言模型ChatGPT 快速、全面了解大型语言模型。学习李宏毅课程笔记。 ChatGPT 目前由OpenAI公司发明的非常火的人工智能AI应用ChatGPT&#xff0c;到底是什么原理呢&#xff1f; G&#xff1a;Generative(生成) P&#xff1a;Pre-trained(预训练) T&#xff1a;Transform…...

canvas-视频绘制

通过Canvas元素来实时绘制一个视频帧&#xff0c;并在视频帧上叠加一个图片的功能可以当作水印。 获取Canvas元素&#xff1a; let canvas document.getElementById(canvas) 通过getElementById函数获取页面中ID为canvas的Canvas元素&#xff0c;并将其存储在变量canvas中。 …...

红酒与美食搭配:味觉的新探索

在美食的世界里&#xff0c;红酒如同一位优雅的舞者&#xff0c;与各种佳肴共舞&#xff0c;创造出无尽的味觉惊喜。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与各式美食相遇&#xff0c;便开启了一场味觉的新探索之旅。 一、红酒与美食的邂逅&#xff…...

大模型日报 2024-08-02

大模型日报 2024-08-02 大模型资讯 博思艾伦在国际空间站部署先进语言模型 摘要: 博思艾伦在国际空间站上的超级计算机上运行了一种生成式人工智能大型语言模型。这一举措标志着语言模型在太空应用方面的重大进展。 人工智能助力研发安全有效的新型抗生素对抗耐药细菌 摘要: 德…...

【Pytorch】一文向您详细介绍 torch.sign()

&#x1f389;&#x1f9e0;**【Pytorch】一文向您详细介绍 torch.sign()** 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff…...

超级详细,如何手动安装python第三方库?

文章目录 1&#xff0c;python第三方库安装包有3种类型2&#xff0c;python第三方库安装包whl文件如何安装&#xff1f;3&#xff0c;python第三方库安装包zip和tar.gz文件如何安装&#xff1f;4&#xff0c; python第三方库安装包exe文件如何安装&#xff1f; 手动安装第三方库…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...