当前位置: 首页 > 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; 手动安装第三方库…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...