spark core dump问题分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


spark 程序 出现吐核 core dump报错

一、报错信息

driver日志: 报错吐核

请添加图片描述

挂掉的executor日志请添加图片描述

nodeManager日志:(报错,吐核)请添加图片描述![请添加图片描述](https://img-blog.csdnimg.cn/8e82450da24749d9b9924faec3cd25d3.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,tex

报的其他错误:系统的 xx.so包没加载成功
请添加图片描述

Internal Error (sharedRuntime.cpp:834), pid=***, tid=***
fatal error: exception happened outside interpreter, nmethods and vtable stubs at pc ***

下图日志:看上去是操作系统的*.so包的版本不匹配
在这里插入图片描述

二、分析思路

1.想确定什么是core dump,什么是吐核

Linux上Core Dump文件的形成和分析
https://www.cnblogs.com/jefree/p/4439034.html

Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量。

凡事皆有两面性,OS在出Core的同时,虽然会终止掉当前进程,但是也会保留下第一手的现场数据,OS仿佛是一架被按下快门的相机,而照片就是产出的Core文件。里面含有当进程被终止时内存、CPU寄存器等信息,可以供后续开发人员进行调试。

关于Core产生的原因很多,比如过去一些Unix的版本不支持现代Linux上这种GDB直接附着到进程上进行调试的机制,需要先向进程发送终止信号,然后用工具阅读core文件。在Linux上,我们就可以使用kill向一个指定的进程发送信号或者使用gcore命令来使其主动出Core并退出。如果从浅层次的原因上来讲,出Core意味着当前进程存在BUG,需要程序员修复。从深层次的原因上讲,是当前进程触犯了某些OS层级的保护机制,逼迫OS向当前进程发送诸如SIGSEGV(即signal 11)之类的信号, 例如访问空指针或数组越界出Core,实际上是触犯了OS的内存管理,访问了非当前进程的内存空间,OS需要通过出Core来进行警示,这就好像一个人身体内存在病毒,免疫系统就会通过发热来警示,并导致人体发烧是一个道理(有意思的是,并不是每次数组越界都会出Core,这和OS的内存管理中虚拟页面分配大小和边界有关,即使不出Core,也很有可能读到脏数据,引起后续程序行为紊乱,这是一种很难追查的BUG)。

2.问题分析思路

按照文章中讲的: core dump是JVM出现问题后,事故保存现场的方法。就像heap dump一样。那么如果要知道准确的jvm问题,就需要分析core dump文件,而分析core dump文件很复杂。所以,知道是程序有问题后,就好解决,排查目前spark作业执行到哪步,分析这一步哪里需要分配巨大的堆内存或者栈内存,就能解决问题

总结

提示:这里对文章进行总结:

core dump是JVM出现问题后,事故保存现场的方法。就像heap dump一样。那么如果要知道准确的jvm问题,就需要分析core dump文件,而分析core dump文件很复杂。所以,知道是程序有问题后,就好解决,排查目前spark作业执行到哪步,分析这一步哪里需要分配巨大的堆内存或者栈内存,就能解决问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你想了解如何分析coredump文件。coredump文件是在程序崩溃或异常终止时生成的,其中包含了程序在崩溃时的内存状态。这些文件对于调试和定位问题非常有用。要分析coredump文件,你可以按照以下步骤进行操作: 1. 确认操作系统和编译器版本:确保你使用的操作系统和编译器版本与生成coredump文件的程序相匹配。不同的操作系统和编译器可能有不同的调试工具和命令。 2. 安装调试工具:根据你的操作系统,安装相应的调试工具。例如,对于Linux系统,常用的调试工具包括GDB(GNU Debugger)和LLDB(LLVM Debugger)。 3. 使用调试工具打开coredump文件:使用所选的调试工具打开coredump文件。可以使用以下命令:`gdb <可执行文件路径> <coredump文件路径>`或`lldb <可执行文件路径> -c <coredump文件路径>`。 4. 分析崩溃信息:一旦你成功打开了coredump文件,调试工具会提供崩溃时的堆栈跟踪信息。这些信息可以告诉你程序崩溃的位置和可能的原因。 5. 查看变量和内存状态:使用调试工具的命令来查看变量的值和内存的状态。你可以使用命令如`print <变量名>`来打印变量的值,或使用`x/<长度><格式> <内存地址>`来查看特定内存地址的内容。 6. 调试和定位问题:通过逐步执行代码、设置断点、打印变量值等方法,来进一步调试和定位问题。这可能需要对调试工具的命令和功能有一定了解。 请注意,coredump文件可能包含敏感信息,因此在分析之前,请确保你对文件的使用有适当的权限和安全措施。此外,分析coredump文件可能需要一定的经验和技能,特别是对于复杂的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值