perf出现SIGBUS的coredump

coredump信息

(gdb) bt full

#0 0x000055c37fa62c00 in perf_evsel__parse_sample (evsel=0x55c381223b00, event=0x7f144843ab30, data=0x7ffcbbcf6540) at util/evsel.c:1939

type = <optimized out>

swapped = <optimized out>

array = <optimized out>

max_size = <optimized out>

endp = <optimized out>

sz = <optimized out>

u = <optimized out>

#1 0x000055c37fa5c9ef in perf_evlist__parse_sample (evlist=<optimized out>, event=event@entry=0x7f144843ab30, sample=sample@entry=0x7ffcbbcf6540) at util/evlist.c:1415

evsel = <optimized out>

#2 0x000055c37fa9f169 in perf_session__deliver_event (session=0x55c38122f0a0, event=0x7f144843ab30, tool=0x55c37fd4f120 <record>, file_offset=3980080) at util/session.c:1483

sample = {ip = 0, pid = 2693265664, tid = 349153765, time = 0, addr = 94298151645472, id = 4242048, stream_id = 94298173534368, period = 139725088729728, weight = 140723459417504,

transaction = 140723459418880, insn_cnt = 94298148829675, cyc_cnt = 0, cpu = 571808, raw_size = 0, data_src = 0, phys_addr = 0, flags = 0, insn_len = 0, cpumode = 0 '\000', misc = 0,

insn = '\000' <repeats 15 times>, raw_data = 0x0, callchain = 0x0, branch_stack = 0x0, user_regs = {abi = 0, mask = 0, regs = 0x0, cache_regs = {0 <repeats 64 times>}, cache_mask = 0},

intr_regs = {abi = 0, mask = 0, regs = 0x0, cache_regs = {0 <repeats 45 times>, 1499604004643535104, 0, 0, 0, 0, 1914, 264, 0, 0, 0, 1499604004643535104, 0, 0, 0, 0, 94298149818197,

1914, 0, 0}, cache_mask = 0}, user_stack = {offset = 0, size = 0, data = 0x0}, read = {time_enabled = 94298175016936, time_running = 24048125519245, {group = {nr = 140723459418768,

values = 0x55c37faa2dd6 <queue_event+86>}, one = {value = 140723459418768, id = 94298148842966}}}}

ret = <optimized out>

#3 0x000055c37faa307d in do_flush (show_progress=true, oe=0x55c381235bb0) at util/ordered-events.c:244

head = 0x55c381235bd8

tmp = 0x55c381392378

iter = 0x55c3813923a0

limit = 18446744073709551615

prog = {title = 0x55c37fbaa388 "Processing time ordered events...", curr = 0, next = 119, step = 119, total = 1914, size = false}

ret = <optimized out>

last_ts = 24048125519245

head = <optimized out>

tmp = <optimized out>

iter = <optimized out>

limit = <optimized out>

last_ts = <optimized out>

prog = <optimized out>

ret = <optimized out>

__mptr = <optimized out>

__mptr = <optimized out>

__u = <optimized out>

__mptr = <optimized out>

__mptr = <optimized out>

#4 __ordered_events__flush (oe=0x55c381235bb0, how=OE_FLUSH__FINAL, timestamp=timestamp@entry=0) at util/ordered-events.c:323

err = <optimized out>

show_progress = true

str = {0x55c37fb897fc "NONE", 0x55c37fb90f55 "FINAL", 0x55c37fb8e667 "ROUND", 0x55c37fb90f5b "HALF ", 0x55c37fb90f61 "TOP ", 0x55c37fb90f67 "TIME "}

#5 0x000055c37faa3849 in __ordered_events__flush (timestamp=<optimized out>, how=<optimized out>, oe=<optimized out>) at util/ordered-events.c:339

err = <optimized out>

show_progress = <optimized out>

str = {0x55c37fb897fc "NONE", 0x55c37fb90f55 "FINAL", 0x55c37fb8e667 "ROUND", 0x55c37fb90f5b "HALF ", 0x55c37fb90f61 "TOP ", 0x55c37fb90f67 "TIME "}

err = <optimized out>

show_progress = <optimized out>

first = <optimized out>

last = <optimized out>

head = <optimized out>

__mptr = <optimized out>

__warned = 0

__ret_warn_once = <optimized out>

__ret_warn_on = <optimized out>

#6 ordered_events__flush (how=<optimized out>, oe=<optimized out>) at util/ordered-events.c:341

coredump分析

从coredump的栈来看,perf执行流程是正常的,搜了下SIGBUS可能的原因如下:

1、文件映射访问异常

这是 SIGBUS 在用户态最为常见的场景,也最容易触发,通常来说根本原因都是进程 mmap 了一个文件后,另外的进程把这个文件截断了,导致 mmap 出来的某些内存页超出文件的实际大小,访问那些超出的内存页就会触发 SIGBUS,具体来说有以下几种场景:
1、进程 mmap 一个文件后,其它进程 truncate 该文件到更小。
2、动态库更新,直接 cp 覆盖。
3、可执行文件更新,直接 cp 覆盖。

系统读取磁盘文件通常是按页映射到内存,出于效率考虑常常使用 copy on write 机制,所以文件映射之后,如果对应的文件 page 不存在了(truncated),也不见得会马上出问题,只有到访问时才会出错,因此有一定滞后期。

2、访问不对齐的内存##

X86 平台上访问不对齐的内存时,默认不会有问题,但用户可以手动设置 EFLAGS 把 CPU 设置为不允许非对齐的内存访问,此时如果出现不对齐的内存访问,SIGBUS 就会抛出,具体例子参看【3】。

3、Stack fault exception

这种场景非常罕见,通常是 OS 或者内存硬件问题,从 intel 的开发者文件来看,这种异常属于 trap,并不是我们用户态常说的 exception,这种异常有三种起因【4】:
1、canonical address violation.
Canonical address 指的是 64 位模式下,地址的高 48 ~ 64 不是全部是 0 或 1 的地址。
如果通过栈指针 rbp 或 rsp 访问了非 canonical address 内核就会发 stack fault trap,示例代码如下:

要注意的是只有栈指针操作才会 SIGBUS,非栈指针引发的这类异常,只会抛 SIGSEG。
2、栈指针操作引用了超出栈大小的地址。
这类操作我还没法重现,只是文档说了可以触发。
3、栈操作引用了不存在的 stack segment。
这类操作通常是内核或编译器的 bug。

综上可知,stack fault 必然是与 rsp/rbp 这样的栈指针操作相关,通常用户态不大可能触发,如果不是 mmap 相关的异常,大多可能是内核或硬件问题(这里有些绝对),这类异常通常会导致内核在 /var/log/messages 下输出如下一条消息:

问题定位

从以上分析可知,大概率和mmap有关,怀疑代码中存在文件并发访问的问题,把问题代码写成小程序在系统上面循环跑测试:

while true; do ./perftest; echo "good";done

发现系统出现SIGBUS的coredump,继续跟踪perf进程:

发现perf是由于文件并发访问导致的SIGBUS。

参考:

https://www.cnblogs.com/catch/p/10973762.html

https://www.cnblogs.com/chenpingzhao/p/5563605.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字化转型核心:实现业务与技术深度融合的运维数字化管理之道

写在前面 数字化转型已经成为大势所趋&#xff0c;各行各业正朝着数字化方向转型&#xff0c;利用数字化转型方法论和前沿科学技术实现降本、提质、增效&#xff0c;从而提升竞争力。 数字化转型是一项长期工作&#xff0c;包含的要素非常丰富&#xff0c;如数字化转型顶层设…

工时表软件:提高工时审批效率,从消除手动操作开始

在记录员工的工作时间以及他们在工作时间内投入的劳动量方面&#xff0c;工时表确实发挥着重要作用。 不过&#xff0c;越来越多的企业发现手动工时表审批的局限性。手动审批往往需要领导或管理人员投入大量时间和精力&#xff0c;容易出错&#xff0c;并且缺乏明确的跟踪记录…

Java 学习和实践笔记(48):怎样用二维数组来存储表格数据?

怎样用数组的方式&#xff0c;来存储下面这个表格的数据&#xff1f; 示例代码如下&#xff1a; import java.util.Arrays;public class Test001 {public static void main(String[] args) {/*object类对象是类层次结构的根。每个类都有Object作为超类。所有对象&#xff0c;包…

财务收支系统怎么做,财务收支记账软件管理系统教程

财务收支系统怎么做&#xff0c;财务收支记账软件管理系统教程 一、前言 以下软件操作教程以 佳易王财务收支记账软件V17.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 财务收支记账管理系统软件可按需定制 1、权限设置&#xff1a;管理员账…

被指华而不实的小罐茶:为广告营销豪掷亿元,谁来为其“买单”?

“酒壮英雄胆,茶引文人思”&#xff0c;茶与酒作为中国传统文化的代表,不仅承载着深厚的历史文化底蕴&#xff0c;也以其普遍性和共通性&#xff0c;逐渐成为现代生活中不可或缺的沟通媒介&#xff0c;被赋予独特的文化内涵与社交属性。 但不同于酒类本身具备的收藏价值&#…

QT_day4:对话框

1、完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…

MATLAB:微分方程(组)数值解

一、显式微分方程 clc,clear tspan [0:10]; y0 2; [t1,y1] ode23(odefun_1,tspan,y0); %求数值解&#xff0c;精度相对低 [t2,y2] ode113(odefun_1,tspan,y0); %求数值解&#xff0c;精度相对高 yt sqrt(tspan1)1; %求精确解 subplot(1,2,1) plot(t1,y1,bo,t2,y2,r*,tspa…

Python学习:函数

函数定义 在Python中&#xff0c;函数&#xff08;Function&#xff09;是一组用于完成特定任务或计算的语句块。定义函数可以让我们将一段代码重用多次&#xff0c;提高代码的可读性和可维护性。以下是定义函数的基本语法和结构&#xff1a; def function_name(parameters):&…

Web3:探索区块链与物联网的融合

引言 随着科技的不断发展&#xff0c;区块链技术和物联网技术都成为了近年来备受瞩目的前沿技术。而当这两者结合在一起&#xff0c;将产生怎样的化学反应呢&#xff1f;本文将深入探讨Web3时代中区块链与物联网的融合&#xff0c;探索其意义、应用场景以及未来发展趋势。 1. …

操作系统原理-模拟动态分区首次适应分配和回收算法——沐雨先生

一、实验题目&#xff1a; 模拟动态分区首次适应分配和回收算法 二、实验目的&#xff1a; 通过本实验&#xff0c;可加深理解动态分区分配、回收程序的功能和具体实现&#xff0c;特别是对回收分区的合并的理解。 三、实验环境&#xff1a; 1、硬件&#xff1a;PC机及其兼容…

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

&#x1f4e3;读完这篇文章里你能收获到 &#x1f6e0;️ 了解APISIX身份认证的重要性和基本概念&#xff0c;以及如何在微服务架构中实施API安全。&#x1f511; 学习如何使用APISIX的Key Authentication插件进行API密钥管理&#xff0c;包括创建消费者和路由。&#x1f504;…

Python 全栈体系【四阶】(十九)

第五章 深度学习 一、基本理论 4. 神经网络的改进 4.3 循环神经网络 4.3.1 标准 CNN 模型的不足 假设数据之间是独立的。标准 CNN 假设数据之间是独立的&#xff0c;所以在处理前后依赖、序列问题&#xff08;如语音、文本、视频&#xff09;时就显得力不从心。这一类数据…

Eigen之norm函数

向量的范数是一个将向量映射到非负实数的函数,通常表示为 ||x||。它是向量空间中的一种度量,用来衡量向量的大小或长度。范数满足以下性质: 非负性:对于任意向量 x,范数 ||x|| 大于等于零,且当且仅当 x 是零向量时等于零。齐次性:对于任意标量 α,范数 ||αx|| 等于 α…

2.Wireshark使用实训——分析FTP包

1&#xff0e;实训目的 掌握Wireshark的基本使用方法&#xff0c;具备Wireshark数据包内容的简单分析能力。 2&#xff0e;应用环境 某公司为了保障网络环境安全&#xff0c;需要使用Wireshark对网络中的数据包进行分析。 3&#xff0e;实训设备 安装有eNSP的计算机。 4&…

电机控制杂谈——永磁同步电机中的永磁体谐波反电势

1.问题的引出 在我的谐波抑制专题中&#xff0c;讲了三种谐波抑制的策略。当时是通过增大逆变器死区来产生较大的谐波。但是在实际电机里面&#xff0c;我感觉死区的影响基本上没有。。。课题组的驱动器中&#xff0c;逆变器的非线性其实基本可以忽略不计了。 但是&#xff0…

Vuex笔记

Vuex vuex 是实现数据集中式状态管理的插件。数据由 vex 统一管理。其它组件都去使用 vuex 中的数据。只要有其中一个组件去修改了这个 共享的数据&#xff0c;其它组件会同步更新。 多个组件之间依赖于同一状态。来自不同组件的行为需要变更同一状态。 环境搭建 1、vue2安…

YOLOv9改进策略:block优化 | ECVBlock即插即用的多尺度融合模块,助力小目标涨点 | 顶刊TIP 2023 CFPNet

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;ECVBlock即插即用的多尺度融合模块&#xff0c;助力检测任务有效涨点&#xff01; yolov9-c-EVCBlock summary: 1011 layers, 68102630 parameters, 68102598 gradients, 252.4 GFLOPs 改进结构图如下&#x…

5个便宜的OV通配符SSL证书品牌

在当今互联网时代&#xff0c;网络安全、数据安全备受关注&#xff0c;作为网站拥有者&#xff0c;保护用户隐私数据安全变得越来越重要。其中&#xff0c;SSL证书是保障网站传输数据安全的关键&#xff0c;而在众多的选择中&#xff0c;OV通配符SSL证书以其验证显示企业身份、…

小林制药含红曲成分保健品疑致2死106人住院:红曲究竟是何方神圣?

一、红曲引发公众担忧二、红曲的生成及其特性三、红曲对人体的潜在风险四、小林制药及其在中国市场的产品情况 参考资料&#xff1a;三好夫人养生网 一、红曲引发公众担忧 近日&#xff0c;小林制药的一款含有红曲成分的保健品被疑似引发严重健康风险&#xff0c;导致两人死亡…

AutoCAD 2024 for Mac/Win:重塑设计绘图新纪元,引领行业变革先锋

在数字化时代的浪潮中&#xff0c;设计绘图工具的发展日新月异&#xff0c;AutoCAD 2024作为一款集创新、高效、智能于一体的CAD设计绘图软件&#xff0c;正以其卓越的性能和人性化的操作体验&#xff0c;引领着行业变革的新潮流。 AutoCAD 2024不仅继承了前代版本的优秀基因&…