企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment
错误信息
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f218f93485d, pid=10, tid=58
#
# JRE version: OpenJDK Runtime Environment 18.9 (11.0.14.1+1) (build 11.0.14.1+1)
# Java VM: OpenJDK 64-Bit Server VM 18.9 (11.0.14.1+1, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C [libstdc++.so.6+0xe585d] std::string::assign(std::string const&)+0x9d
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /app/core.10)
#
# An error report file with more information is saved as:
# /app/hs_err_pid10.log
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
xargs: java: terminated by signal 6
问题原因
我们不卖关子,问题的原因就是,你使用了已经被销毁的sdk,或者重复销毁一个sdk。
这里说的销毁就是调用了sdk的这个方法:
Finance.DestroySdk(sdk);
这里我得吐槽一下,腾讯的sdk写的真的烂,哪怕是这样,报个错就行了,竟然直接把jvm搞挂了。
解决办法
知道问题的原因,就好解决了。首先你得好好review一下你的代码,到底哪里重复销毁了相同的sdk,或者前面销毁了sdk,后面又尝试去用。
说一下我遇到问题,供大家参考一下。
首先我用的是github上的一个开源库:
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-cp</artifactId><version>4.5.5.B</version>
</dependency>
我用这个库拉取企业微信的会话,然后存档。对接过企业微信会话存档的,应该都知道有两部分内容需要拉取:一部分是消息信息,一部分是媒体文件。
官方文档说不用每次都重新创建和初始化sdk,也就是可以复用。
所以我的处理流程是,先拉取消息,然后使用拉取消息的sdk拉取媒体文件,然后就遇到了本文说的这个问题。
开始我以为是因为文件太大了,内存不足,所以还限制了文件大小,重新发布了几次,没解决问题。
打印了文件大小,发现文件也只有几十kb,显然内存没压力。
多次对比我发现,只要有一个文件拉取失败,紧接着就会出现这个问题。发现了这个现象,我感觉距离真相很近了。
于是我开始查看这个库的拉取媒体文件的代码:
public void getMediaFile(long sdk, @NonNull String sdkfileid, String proxy, String passwd, long timeout, @NonNull Consumer<byte[]> action) throws WxErrorException {if (sdkfileid == null) {throw new NullPointerException("sdkfileid is marked non-null but is null");} else if (action == null) {throw new NullPointerException("action is marked non-null but is null");} else {String indexbuf = "";int data_len = 0;log.debug("正在分片拉取媒体文件 sdkFileId为{}", sdkfileid);while(true) {long mediaData = Finance.NewMediaData();int ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, proxy, passwd, timeout, mediaData);if (ret != 0) {Finance.FreeMediaData(mediaData);Finance.DestroySdk(sdk);throw new WxErrorException("getmediadata err ret " + ret);}data_len += Finance.GetDataLen(mediaData);log.info("正在分片拉取媒体文件 len:{}, data_len:{}, is_finis:{} \n", new Object[]{Finance.GetIndexLen(mediaData), data_len, Finance.IsMediaDataFinish(mediaData)});try {action.accept(Finance.GetData(mediaData));} catch (Exception var15) {var15.printStackTrace();}if (Finance.IsMediaDataFinish(mediaData) == 1) {Finance.FreeMediaData(mediaData);return;}indexbuf = Finance.GetOutIndexBuf(mediaData);Finance.FreeMediaData(mediaData);}}}
然后就看到了这个让我吐血的代码:
if (ret != 0) {Finance.FreeMediaData(mediaData);Finance.DestroySdk(sdk);throw new WxErrorException("getmediadata err ret " + ret);}
也就是文件拉取失败之后,会把sdk给销毁。好吧,销毁就销毁吧,那文件拉取成功你也销毁啊。结果它失败是销毁,成功就不销毁,这是典型的方法行文不一致。
因为这个sdk已经被销毁了,所以后续使用这个sdk拉取其他文件的时候就会报这个错误了。
因为这个方法的怪异行文,所以我们就不能复用拉取消息的sdk。在拉取媒体文件的时候就得重新创建一个sdk,重新初始化sdk。(如果你不是用的这个库,那就可以复用,只要你注意只在请求的最后finaly里面销毁sdk即可)。
既然我们选择自己创建sdk,就要自己销毁sdk。
public MediaData getMediaData(String sdkFileId) {WxCpService wxCpService = WxCpConfiguration.getWxCpService(App.AUDIT);WxCpMsgAuditService msgAuditService = wxCpService.getMsgAuditService();MediaData mediaData = new MediaData();long sdk = 0L;boolean sdkDestroyed = false;try {sdk = Finance.NewSdk();String msgAuditSecret = wxCpService.getWxCpConfigStorage().getMsgAuditSecret();if (StringUtils.isEmpty(msgAuditSecret)) {msgAuditSecret = wxCpService.getWxCpConfigStorage().getCorpSecret();}long ret = Finance.Init(sdk, wxCpService.getWxCpConfigStorage().getCorpId(), msgAuditSecret);if (ret != 0L) {Finance.DestroySdk(sdk);throw new WxErrorException("init sdk err ret " + ret);}msgAuditService.getMediaFile(sdk, sdkFileId, null, null, 180L, mediaData::setBytes);} catch (WxErrorException e) {log.error("获取文件内容失败,sdk:{},sdkFileId:{},错误码:{},错误原因:{}", sdk, sdkFileId, e.getError().getErrorCode(), e.getError().getErrorMsg());// 出现WxErrorException这个异常,库的内部已经销毁了sdk,不用再手动销毁了sdkDestroyed = true;} finally {if (sdk != 0L && !sdkDestroyed) {Finance.DestroySdk(sdk);}}return mediaData;}
注意我这里加了一个标记sdkDestroyed,一旦捕获到了WxErrorException,getMediaFile这个方法其实已经销毁了sdk,就不要重复销毁,否则还是会有这个问题。
这个问题就讲到这里,希望能帮到大家。
题外话,解决这个问题的时候,又发现了一个新的问题,这个库的getMediaFile方法是分批拉取文件的。如果文件太大的话,我这种写法获取的其实是最后一批的数据,并不是完成的文件。好吧,后面再更新如何解决这个问题。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment
错误信息 # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc0x00007f218f93485d, pid10, tid58 # # JRE version: OpenJDK Runtime Environment 18.9 (11.0.14.11) (build 11.0.14.11) # Java VM: OpenJDK 64-Bit Server VM 18.9…...
![](https://www.ngui.cc/images/no-images.jpg)
nginx-docker 搭建websocket反向代理
下载镜像 docker pull nginx复制出配置文件 将/etc/nginx/nginx.conf和/etc/nginx/conf.d/default.conf复制到本机 nginx.conf文件内容 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_c…...
![](https://www.ngui.cc/images/no-images.jpg)
blender插件开发
Quickstart — Blender Python API Blender Python 编程:关键概念 - 知乎 系列目录链接(更新中,如无链接说明未更新) [Blender Python] 列出/插入/删除物体,Blender数据对象 - 知乎 (zhihu.com)[Blender Python] 设…...
![](https://img-blog.csdnimg.cn/direct/aeb4728329f54194bf3c63d6c646b435.png)
【数据结构】二叉搜索(查找/排序)树
一、二叉搜索树基本概念 1、定义 二叉搜索树,又称为二叉排序树,二叉查找树,它满足如下四点性质: 1)空树是二叉搜索树; 2)若它的左子树不为空,则左子树上所有结点的值均小于它根结…...
![](https://img-blog.csdnimg.cn/direct/ef44355ae6ac4cfba54b72015c01e2c2.png)
Vue:Vue与VueComponent的关系图
1.一个重要的内置关系:VueComponent.prototype.proto Vue.prototype 2.为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。 案例证明: <!DOCTYPE html> <html lang"en"&…...
![](https://img-blog.csdnimg.cn/img_convert/f4c28b271360896397e05b7676861ee0.png)
Elasticsearch8集群部署
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 本文记录在3台服务器上离线搭建es8.7.1版本集群。 1. 修改系统配置 1.1 hosts配置 在三台es节点服务器加入hostname解析&…...
![](https://www.ngui.cc/images/no-images.jpg)
【小白专用】c# 如何获取项目的根目录
1、取得控制台应用程序的根目录方法 方法1、Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法2、AppDomain.CurrentDomain.BaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集 2、取得Web应用程序的根目录方法 方法1、HttpRun…...
![](https://img-blog.csdnimg.cn/direct/64dba7e7e0bd43adacfe5c3423277b9b.png)
【PXIE301-208】基于PXIE总线架构的Serial RapidIO总线通讯协议仿真卡
板卡概述 PXIE301-208是一款基于3U PXIE总线架构的Serial RapidIO总线通讯协议仿真卡。该板卡采用Xilinx的高性能Kintex系列FPGA作为主处理器,实现各个接口之间的数据互联、处理以及实时信号处理。板卡支持4路SFP光纤接口,支持一个PCIe x8主机接口&…...
![](https://img-blog.csdnimg.cn/24b9c2836ce448598341c522f02c83b2.png)
软件测试/测试开发丨Windows系统chromedriver安装与环境变量配置
一、selenium 环境配置 1、chrome 浏览器的安装与配置 目前比较常用的浏览器是 Google Chrome 浏览器,所以本教程以 chrome 为主,后面简介一下其他浏览器的环境配置。 (1)chrome 下载: www.google.cn/chrome/ (2&a…...
![](https://img-blog.csdnimg.cn/direct/66cda75fce5043bdb50ab9136d0e7158.gif#pic_center)
【vim 学习系列文章 3.1 -- vim 删除 ^M】
请阅读【嵌入式开发学习必备专栏 之 VIM 专栏】 文章目录 ^M 来源^M 删除 ^M 来源 在 Vim 中打开文件时,您可能会遇到行尾的 ^M 字符,这通常是因为文件使用了 Windows 风格的回车换行符(CRLF),而不是 Unix/Linux 风格…...
![](https://img-blog.csdnimg.cn/direct/c5603a040f2445f6a922306d928f5ee4.png#pic_center)
深入理解 C# 中的字符串比较:String.CompareTo vs String.Equals
深入理解 C# 中的字符串比较:String.CompareTo vs String.Equals 在处理字符串时,了解如何正确比较它们对于编写清晰、有效和可靠的 C# 程序至关重要。本文将深入探讨 C# 中的两个常用字符串比较方法:String.CompareTo 和 String.Equals&…...
![](https://img-blog.csdnimg.cn/direct/7519179a0a2c4ad2af0839905b24cc4d.png)
DevOps持续交付之容器化CICD流水线
DevOps持续交付 随着DevOps⼤规模化的落地和应⽤,持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成,使⽤的开源⼯具是Jenkins,CD指的是持续交付和持续部署,⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…...
![](https://img-blog.csdnimg.cn/direct/a6f71a6f6a814eb4ab161ca7ed4a0b32.png)
Linux/Unix/国产化操作系统常用命令(二)
目录 后CentOS时代国产化操作系统国产化操作系统有哪些常用Linux命令关于Linux的LOGO 后CentOS时代 在CentOS 8发布后,就有了一些变化和趋势,可以说是进入了"后CentOS时代"。这个时代主要表现在以下几个方面: CentOS Stream的引入…...
![](https://www.ngui.cc/images/no-images.jpg)
基于SpringBoot的智慧生活商城系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的智慧生活商城系统,java…...
![](https://img-blog.csdnimg.cn/direct/a52d3572deec4a2a9e40a73ca834d8eb.png)
Vue框架引入Axios
首先已经创建好了 Vue 框架,安装好了 node.js。 没有完成的可按照此博客搭建:搭建Vue项目 之后打开终端,使用命令。 1、命令安装 axios 和 vue-axios npm install axios --save npm install vue-axios --save2、package.json 查看版本 在 p…...
![](https://www.ngui.cc/images/no-images.jpg)
EasyExcel 通过模板 导入、导出、下载模板
EasyExcel 通过模板 导入、导出、下载模板 import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; import java.io.…...
![](https://img-blog.csdnimg.cn/direct/cb45fc70934d43d98ef88bd6a1d0bbcc.png)
SAP ABAP通过代码解锁SM12中被锁定目标<转载>(RFC: ENQUEUE_READ和 ENQUE_DELETE)
原文链接:https://blog.csdn.net/sinat_38119716/article/details/121406275 备注 RFC:ENQUEUE_READ 读取的是SM12的数据 RFC:ENQUEUE_READ2 读取的是SMENQ的数据 SM12 和 SMENQ 的数据其实是一样的,只是一个是旧的TCODE 一个是新的 解锁用的都是RFC: …...
![](https://img-blog.csdnimg.cn/direct/4a111087eaf4481ebc1dc18086dfd8fc.png)
跳跃表原理及实现
一、跳表数据结构 跳表是有序表的一种,其底层是通过链表实现的。链表的特点是插入删除效率高,但是查找节点效率很低,最坏的时间复杂度是O(N),那么跳表就是解决这一痛点而生的。 为了提高查询效率,我们可以给链表加上索…...
![](https://img-blog.csdnimg.cn/direct/24fab32e1e1f453990247fc51cab86ab.png)
详解Vue3中的鼠标事件mousemove、mouseover和mouseout
本文主要介绍Vue3中的常见鼠标事件mousemove、mouseover和mouseout。 目录 一、mousemove——鼠标移动事件二、mouseover——鼠标移入事件三、mouseout——鼠标移出事件 下面是Vue 3中常用的鼠标事件mousemove、mouseover和mouseout的详解。 一、mousemove——鼠标移动事件 鼠…...
![](https://img-blog.csdnimg.cn/direct/6bac11b4dd524e2eb25fe8af70b410e4.png)
Java:socket编程
目录 1、主程序 2、socket任务类 3、jdbc任务类 4、tomcat-jdbc连接池 5、jar包依赖 1、主程序 创建2个线程池,一个用于管理socket连接,一个用来管理jdbc连接。 package socket;import java.io.IOException; import java.net.ServerSocket; import…...
![](https://img-blog.csdnimg.cn/782e1d77530f41609275e5ea106d50b1.png)
哨兵1号回波数据(L0级)FDBAQ压缩算法详解
本专栏目录: 全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 1. 全球SAR卫星回波数据压缩算法统计 各国的SAR卫星的压缩算法按照时间轴排列如下: 可以看出传统的分块BAQ压缩算法(上图粉色)仍然是主流,哨兵1号其实也有传统的BAQ压缩模式。 本文介绍哨兵1号用的FDBAQ算…...
![](https://img-blog.csdnimg.cn/img_convert/e1c2907a6d0431c6cc88d0df23e203bd.gif)
盾构机数据可视化监控平台 | 图扑数字孪生
2002 年,中国 863 计划把盾构机列为国家关键技术,以国家力量为主导,集中力量进行盾构机专项研究。在 2008 年,中国成功研制出属于自己的国产盾构机——中国中铁一号,同时还打通了天津地铁 1500m 的隧道。此举更彻底地打破了国内盾…...
![](https://img-blog.csdnimg.cn/direct/23cc3e1976ca42fab30b6d3433b5ec38.png)
计算机网络课程设计-企业网三层架构
(单人版) 摘 要 本篇报告主要解决了为一家名为西宫的公司网络搭建问题,该网络采用企业网三层架构对完了过进行设计。首先使用以太网中继,主要使用VLAN划分的技术来划定不同部门。使用MSTP对每个组配置生成树,防止交换机…...
![](https://www.ngui.cc/images/no-images.jpg)
Docker上传镜像到Harbor
上传镜像到Harbor 给镜像打上标签 语法 docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/] docker tag eureka:v1 127.0.0.1:85/tensquare/eureka:v1推送镜像 docker push 127.0.0.12:85/tensquare/eureka:v1如果出现以下错误,是因为Docker没有把Har…...
![](https://img-blog.csdnimg.cn/direct/9296eae3dbc5441c91a37dd4bbb6a3f7.png)
mfc100u.dll文件丢失了要怎么解决?修复mfc100u.dll详细指南
mfc100u.dll文件丢失了要怎么解决?首先让我们扒一扒什么是 mfc100u.dll。这玩意儿是 Microsoft Visual Studio 2010 的一部分,它就像一款程序生活中不可或缺的零件,没了它,程序肯定跑不起来。想想看,没有一个重要的零件ÿ…...
![](https://img-blog.csdnimg.cn/direct/d1ae04a0509540db9445d423732b3edf.png#pic_center)
【ArcGIS微课1000例】0084:甘肃积石山地震震中100km范围内历史灾害点分布图(2005-2020)
甘肃积石山地震震中100km范围内历史灾害点分布图(2005-2020)。 文章目录 一、成果预览二、实验数据三、符号化四、地图整饰一、成果预览 本实验最终效果图如下所示: 二、实验数据 以下数据可以从本专栏配套的实验数据包中0084.rar中获取。 1. 历史灾害数据。为2005-2020时…...
![](https://img-blog.csdnimg.cn/direct/c0e46684e58e4cd0a71e3e481ff005f6.png)
java SSM拖拉机售后管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
一、源码特点 java SSM拖拉机售后管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源 代码和数据库,系统主要…...
![](https://img-blog.csdnimg.cn/direct/0e6744f90903419592a73ab9535f3fda.png)
侯捷C++ 2.0 新特性
关键字 nullptr and std::nullptr_t auto 一致性初始化:Uniform Initialization 11之前,初始化方法包括:小括号、大括号、赋值号,这让人困惑。基于这个原因,给他来个统一,即,任何初始化都能够…...
![](https://img-blog.csdnimg.cn/direct/8aed0373314440d0a838a377c6668706.gif)
计算机网络——基础知识汇总(八)
个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...
![](https://img-blog.csdnimg.cn/img_convert/b42e9f2869c2f31b6c26f49f357d38ca.jpeg)
DIA数皆智能客户体验管理CEM获伊利“健康+AI”生态创新大奖
DIA数皆智能客户体验管理CEM获伊利“健康AI”生态创新大奖 数皆智能再获殊荣! 北京,2023年12月26日 — 在全球瞩目的伊利集团“健康AI”生态创新大赛中,上海数皆智能技术有限公司大放异彩,其创新领先的“智能化客户体验管理CEM&a…...
![](/images/no-images.jpg)
网站建设技术列表/技能培训班有哪些课程
Java实现文件操作方式有很多,这里写了几个小工具,需要的话可以直接拷贝使用,或者优化后使用。基本概念FileChannel是一个用读写,映射和操作一个文件的通道,也是Java NIO对应于磁盘等存储设备文件操作的通道。除了读写操…...
![](/images/no-images.jpg)
竞网做的网站怎么/宁波seo深度优化平台
动态规划思想是将大问题分解成小问题,然后解决所有的小问题,最后把解组合起来就得到大问题的解。这个和分治法思想很类似,但是这里的小问题是有重叠的,分治处理的小问题都是独立的,有重叠就会有重复计算,为…...
![](/attachment/201104/1/20639775_1301638732qZf3.jpg)
wordpress后台修改文章浏览数/最新消息新闻头条
KeepalivedLVSMysql-Cluster(7.1.10)的安装配置NDB Cluster的硬件需求: 管理节点:对硬件没什么要求,差 一点的机器完全能够胜任 数据节点:可以选择大内存,cpu也相对来讲不错 的,尤其是以后ndbmtd对多核Cpu的支持 Mysql节 点&#…...
![](https://img-blog.csdnimg.cn/b7c4e046684446f38f5eb9a88aab136c.jpeg)
wordpress使用技巧/网销是什么工作好做吗
据悉,2022国际人工智能大会SAIL奖TOP30榜单近来正式出炉。作为国际人工智能大会的最高奖项,SAIL奖(Superior AI Leader,卓越人工智能引领者)坚持“追求卓越、引领未来”的理念,从全球规模发掘在人工智能范畴…...
![](/images/no-images.jpg)
网站开发需求书/seo优化方式
3X家庭净水计划 1. 双膜单出水净水机(润佳系列 RO-18) 雷谛净水器主要参数: 双膜单出水,节能节水 智能控制显示 韩国进口RO和UF膜组件 马来西亚椰壳活性炭 欧洲标准工艺流程与结构设计 水压要求:0.1-0.4MPa 净水流量:50G 冲洗方式…...
![](http://s3.51cto.com/wyfs02/M01/73/00/wKioL1XyK6qiqhfiAAIrv32JLps296.jpg)
广州市住房和城乡建设委员会网站/北京网站推广机构
2015年9月数据库流行榜单最新出炉!与上个月相比,最受欢迎的前10名排名不变。第一梯队依旧是三足继续鼎立:Oracle雄霸榜单,MySQL和SQL Server尾随其后。第二梯队仍是MongoDB为排头兵,稳步攀升。建议以前只专注于RDBMS的…...