在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。...一般都是和内核有交互,例如用户空间程序使用系统调用进入内核空间。这时使用的不再是用户空间的栈空间,使用对应的内核栈空间。...对每一个进程来说,Linux内核都会把两个不同的数据结构紧凑的存放在一个单独为进程分配的存储空间中:一个是内核态的进程堆栈,另一个是紧挨进程描述符的数据结构thread_info,叫线程描述符。...在Linux-2.6.32内核中thread_info.h文件中有对内核堆栈的定义: #define THREAD_SIZE 8192 在Linux内核中使用下面的联合结构体表示一个进程的线程描述符和内核栈...,在内核中文件include/linux/sched.h。
1 背景Linux操作系统在作为服务器的场景下应用最为广泛,但是在使用过程中也会遇到莫名崩溃的情况.这时我们就希望能对崩溃前一刻内存中的数据进行分析,从而找到崩溃的原因.本文将对整个过程所涉及到的技术做一个简单但是全面的介绍...,包括:如何安装kdump,如何设置系统参数来捕获崩溃前的内存;如何使用crash做简单的分析;并且介绍如何使用更加简便的工具PyKdump来做crash文件的分析.通过了解这些知识, 可以帮助Linux...crash工具分析4.1 安装crash工具为了不影响生产系统的运行,通常我们会将生成的vmcore文件拷贝到用于分析的Linux系统上去分析.分析工具通常采用crash工具.CentOS下可以通过如下命令安装...“/src/crash-7.3.2”表示crash源代码所在目录.编译完成后将得到如下一些动态库,这些库后续可以载入crash,作为插件使用.5.2 使用PyKdump首先我们通过如下命令装载vmcore...Linux 7 Kernel Crash Dump Guidehttps://access.redhat.com/documentation/en-us/red_hat_enterprise_linux
.* > sysdump.core 4)使用crash工具解析之前生成出来的sysdump.core文件: crash_arm -m phys_base=0x80000000 vmlinux sysdump.core...Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc....This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=aarch64-elf-linux"......crash_arm64> 其中经常用的有:log,ps,sys,mount,sym,rd/wr,bt等。 1)使用sys命令查看系统概况。...2)使用log > kernel.log将kernel log重定向到文件中。 3)使用kmem –i查看内存使用状况。 4)使用ps命令检查进程状态。
前言 上一篇给大家介绍了Android Crash中的Java Crash分析,我们可以知道Java Crash一般会弹出提示框告诉我们程序崩溃了,通常使用Crash工具都能够捕获到;本篇博客来谈谈如何针对...这类错误一般是由C++层代码错误引起的 绝大部分Crash工具不能够捕获 我们在实际Android开发的时候,可能会引入第三方的一些so库或者自己开发相应的so库供程序使用,然而so库一般是通过c或者...上一节我们谈到so库是同通过Native语言开发的,自然在Android中使用so库的时候发生的Crash,就是我们所说的Native Crash。...Crash分析有个初步的认识,关于这一块还有很多东西可以讲,比如具体的signal有哪些,Linux下的信号机制是怎样的,怎样才能够捕获到信号等等,关于Native层的Crash捕获,我们有没有第三方的开发工具能帮助到我们...,这里就要隆重推荐大家使用Bugly,可以说是业内领先的崩溃捕获工具,不仅能够帮助我们获取到完整的错误堆栈,还能够将出错的上下文环境参数(比如系统版本、设备信息、内存信息等)详细的展现出来,大家不妨可以尝试下
概述 近期碰到了一个 Linux Systemd 服务 Crash, Crash 后需要人工介入重启. 那么, 有没有办法如何实现 Linux 服务 Crash 后自动重启?...也许你使用的软件有一个已知的错误,要求在崩溃时删除缓存文件,也许你想启动一个脚本来收集日志和系统信息,以便诊断问题。Systemd 允许你指定在服务失败时运行的单元。
这里我们进行一些概念上的普及: Crash就是由于代码异常而导致App非正常退出现象,也就是我们常说的『崩溃』 Android中有哪些类型Crash 通常情况下会有以下两种类型Crash: Java Crash...Native Crash 本篇先探讨Java Crash,Native Crash我们会在下一篇重点讨论。...} private File dumpExceptionToSDCard(Throwable ex) throws IOException { // 如果SD卡不存在或无法使用...当然上面只适用于Java Crash捕获,如果想更专业捕获到异常并更高效分析程序问题,可以尝试使用专业的第三方SDK来实现,这里推荐『腾讯Bugly』,可以参考一下笔者前面发表的文章『快速集成Bugly...,比如你使用了第三方的so库,如果发生崩溃了,你也会崩溃的。
1、手动捕捉crash 即使有了bugly,也需要知道奔溃是如何捕捉的。 注意:自定义NSSetUncaughtExceptionHandler之后,会导致bugly失效,需要注意!!...//crash奔溃的处理 exception_init(); } void exception_init(void) { // _objc_terminate是一个函数指针...old_terminate = std::set_terminate(&_objc_terminate); } //系统出现crash都会来到这个函数 static void _objc_terminate
常用的地址转换工具有addr2line、ndk-stack等,个人比较喜欢addr2line,所以接下来介绍下该工具的基本使用方式 addr2line简介 使用-h参数查看工具的可选参数配置 日常使用过程中...其中NDK中的aarch64-linux-android-c++fil(和addr2line同一个目录)是专门用来支持Demangle的 addr2line使用示例 新建一个带C++的Android Studio...转换地址 aarch64-linux-android-addr2lin -C -f -e ${SO_PATH} ${Address} ${Address} ......解析结果 定位到具体的函数名和行数后就可以进一步排查问题了 Crash堆栈解析脚本 日常工作或者学习中还是使用一个python脚本来解析带crash堆栈的文件比较方便 #!...print(res) 使用效果 ~~END~~
在启动很大量的qemu之后,会有部分qemu进程crash。结合之前的分析过程,作者判断,很可能是系统调用clone发生了失败。是时候使用systemtap了。...使用systemtap需要有debug symbol,如果是发行版,可以参考发行版提供的kernel symbol,参考官方的教程,可以搭建起来systemtap的使用环境。...结合linux-4.4/include/linux/cgroup_subsys.h发现,11就是在检查pids的时候发生的错误。...5,pids cat /proc/PID/cgroup来查看qemu使用的cgroup。...本文的场景下,当然也可以使用printk来逐步分析~ 这个问题找到root cause,安心多了。
) 的描述来看,此次故障跟文档描述基本上一致,如下: 其中地址[0x679000020] 后面的内容也均为0,跟文档描述一样,其次,文章中提到使用了linux 内存释放机制以及同时启用了hugepage...根据文档描述,这应该是Linux bug。...我猜想肯定是操作系统的内存使用率看起来很高,通过检查发现确实如此: 检查free memory 我们可以看到128G的物理内存,cache 就占据了88G的样子目前。...而实际上该数据库实例的内存分配一共也就40G,且使用的是linux raw。...完全可以调整linux的参数去释放cache,而不需要使用echo 这种比较暴力的方式;根据Oracle mos的几个文档的描述,推荐设置如下几个参数: sysctl -w vm.min_free_kbytes
[1] Debugging a futex crash: https://rustylife.github.io/2023/08/15/futex-crash.html 很精彩的文章, 水友群一个朋友遇到了一个...core的堆栈仅有 futex相关 >>> bt #0 0x00007f7430470fbb in raise () from /home/rusty/futex/sysroot/lib/x86_64-linux-gnu.../libc.so.6 #1 0x00007f7430456864 in abort () from /home/rusty/futex/sysroot/lib/x86_64-linux-gnu/libc.so...() from /home/rusty/futex/sysroot/lib/x86_64-linux-gnu/libc.so.6 #3 0x00007f74304b97b0 in __libc_fatal...() from /home/rusty/futex/sysroot/lib/x86_64-linux-gnu/libpthread.so.0 #6 0x0000000001acedc0 in ??
crash 是目前广泛使用的 linux 内核崩溃转储文件的分析工具,掌握 crash 的使用技巧,对于分析定位内核崩溃的问题,有着非常重要的作用。...本文首先介绍了 crash 的基本概念和安装方法,其次详细介绍了如何使用 crash 工具分析内核崩溃转储文件,包括各种常用调试命令的使用方法,最后以几个实际工作中遇到的真实案例向读者展示了 crash...那么 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。...crash 支持 2.2.5-15(含)以后的 Linux 内核版本。随着 Linux 内核的更新,crash 也在不断升级以适应新的内核。...那么 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。
它是一套完整的工具集,从Crash的捕获到Crash的dump,都提供了相对应的工具。...工作原理: 项目地址 breakpad:GitHub - google/breakpad: Mirror of Google Breakpad project 编译安装 linux平台下 linux.../linux-syscall-support 1.下载breakpad和LSS源码 2.将LSS中的linux_syscall_support.h移动到breakpad/src/third_party.../configure make sudo make install # sudo checkinstall Windows下的安装 稍麻烦些,推荐使用vcpkg安装。.../minidump_stackwalk.exe test.dmp >test.txt minidump_stackwalk.exe工具下载,放在我的资源里了,可以直接下载使用。
使用symbolicatecrash 在Xcode6.0之后,这个脚本位于 Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework...想起每当我第一次将某个iOS设备连接到电脑上时,Xcode都会loading一段时间,才能使用这个设备。在loading的阶段,依稀记得Xcode上的提示是“copying symbols”之类的。...所以找测试同学借了发生这个crash的设备,连接到电脑,果然出现了一个新的文件夹。...参考 分析iOS Crash文件:符号化iOS Crash文件的3种方法 symbolicatecrash with XCode 4.2 not symbolicating system symbols
在上图里,堆栈信息中 pc 后面跟的内存地址,就是当前函数的栈地址,我们可以通过命令行arm-linux-androideabi-addr2line -e 内存地址得出出错的代码行数了。...要实现 Native Crash 的收集,主要有四个重点:知道 Crash 的发生;捕获到 Crash 的位置;获取 Crash 发生位置的函数调用栈;数据能回传到服务器。...不同的处理器,有不同的异常中断类型和中断处理方式,linux 把这些中断处理,统一为信号量,每一种异常都有一个对应的信号,可以注册回调函数进行处理需要关注的信号量。...只不过这个库是全平台的 android、iOS、Windows、Linux、MacOS 全都有,所以非常大,在使用的时候得把无关的平台剥离掉减小体积。...report(); } 如果你按照本文讲的,应该是可以创建一个可以工作的 Native Crash 收集库了,但是还有很多细节上的问题,比如数据的丢失问题,写文件的时候使用w+可能造成上次存储的文件丢失
用户在使用App的过程中,经常遇到闪退的情况,体验不太好,本文尝试探索引发闪退的原因,以及在遇到crash的情况下,尽可能的保持程序运行,并及时上报错误。...一、crash类型 1.OC层面的crash 1.1 普通类型 NSInvalidArgumentException:非法参数异常,传入非法参数导致异常,nil参数比较常见。...二、存在问题 程序闪退,用户体验不好 三、监听crash 1.任凭程序闪退并上报 1.1 NSSetUncaughtExceptionHandler 捕获OC层面的crash 参考文章 (1)AppDelegate...注意:使用方法进行捕获异常之后,第三方工具将不会搜集到崩溃信息并上报,需要在catch中手动上报。...注意:使用方法进行捕获异常之后,第三方工具将不会搜集到崩溃信息并上报,需要在catch中手动上报。
symbolicatecrash工具 脚本里面我已经自动找到此工具的路径了,直接用就行 crash文件 获取crash文件有很多种方法,其中比较常用的有: 通过Xcode->Window->Devices...,打开终端进入那个文件夹输入: sh /Users/mac/Documents/crash/CrashSymbolic.sh 然后就会生成解析好的symbol.crash CrashSymbolic.sh...-name "*.crash") } if [ -n "$1" ] then crashPath=$1 echo "已传入crash文件路径:$crashPath" else...findFile echo "未传入crash文件路径,搜索同级目录下crash文件" fi if [ !.../symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash $symbolToolPath $crashPath $dSYMPath > symbol.crash
背景 分享一些过去两个月遇到的crash。...根据堆栈信息和日志信息,可以找到用户操作路径,是通过scheme进入分类; 但是直接用真机复现,相同的操作并不会导致crash; 通过分析crash出现的机型和系统特征,发现都是iOS 13以下系统...但是使用不当的时候,weak指针也很容易造成crash,如下图: ?...方法访问到该按钮,则会发生crash; 2、详情页的某个view,使用getter的方式获取,在dealloc方法时访问了该getter; getter实现 ?...、使用一个不熟悉的系统API接口,最好花时间阅读下接口说明; 3、子线程发生crash时,要习惯性看看主线程;
前言 作为开发者,程序崩溃是很经常的事,我们可以自己利用崩溃日志和自己找出Crash的原因,但是当团队人数众多,多版本控制的情况下,以及线上版本崩溃追踪都迫切需要一个工具来把崩溃的原因反馈给我们,最好是定位到崩溃的具体位置和在代码的具体行数...例如:Crashlytics会根据每种类型的Crash的出现频率以及影响的用户量来自动设置优先级。...对于每种类型的Crash,Crashlytics除了会像一般的工具提供Call Stack外,还会显示更多相关的有助于诊断的信息,例如:设备是否越狱,当时的内存量,当时的iOS版本等。...对于修复掉的Crash日志是十分有帮助的 除此之外,Fabric使Crashlytics还具有分析用户行为,跟踪用户操作的功能,这个跟友盟分析很像,也是一个很实用的功能。...使用真机时,需要拔掉连接线;使用模拟器时,需要先通过点击Xcode的停止键,然后在模拟器中通过点击应用图标后打开,Xcode运行模拟器的时候会阻止dSYM文件的上传。
crash>log .... [23680089.192513] NMI watchdog: BUG: soft lockup - CPU#11 stuck for 22s!...[filebeat:47277] .... crash> runq .... ......计算截止重启时刻cpu12 多长时间未发生调度: crash> eval 23680089192515189-23680067820641540 hexadecimal: 4f9dce971...> pd 21371873649/1000000000 $1 = 21 crash> eval 21371873649/1000000000 hexadecimal: 15 decimal: 21...octal: 25 binary: 0000000000000000000000000000000000000000000000000000000000010101 crash>
领取专属 10元无门槛券
手把手带您无忧上云