开源共建 | 长安链开发常见问题及规避

长安链开源社区鼓励社区成员参与社区共建,参与形式包括不限于代码贡献、文章撰写、社区答疑等。腾讯云区块链王燕飞在参与长安链测试工作过程中,深入细致地总结了长安链实际开发应用中的常见问题及其有效的规避方法,相关内容多次解答社区成员开发过程中遇到的问题,帮助开发者提升开发效率与质量。

长安链开发常见问题及规避

前言

此文是记录长安链开发过程中可能遇到的问题以及如何规避相关问题。

问题一:日志存储CFS引发的问题

引发风险:

日志存储在CFS盘后,引起的dag超时,tps下降,内存溢出等。

引发原因:

因为日志存储在cfs上,网络io的延时比较高,所以写日志就会变得很慢,导致整体变慢,最后导致内存溢出。

规避建议:

链上的日志存储,不建议在cfs盘(网络盘)存储,建议存储到ssd盘。

问题二:文件存储出现两个.END文件

引发风险:

出现两个.END文件以后,节点启动就会panic,相关报错:panic: kvdb height: 218142 should not bigger than logdb: 215131, chain data maybe missed。

引发原因:

暂时未知,这里遇到多次,多数是文件存储配置在cfs盘。

规避建议:

如果遇到上述报错,建议在文件存储中找到老的.END文件,进行删除,这样直接重启节点,可以恢复。

问题三:链升级过程中wasmer库引发的panic

引发风险:

由于在升级过程中(例如:224版本升级231版本),不需要重新构造链,只需要替换二进制,因此wasmer库在启动的时候,还用的旧版本,启动后,节点panic:./chainmaker: symbol lookup error: ./chainmaker: undefined symbol: wasm_extern_vec_destroy。

引发原因:

主要是因为wasmer库升级,老版本的libwasmer.so文件与新版本的不兼容,因此会报错如上。

规避建议:

如果遇到上述错误,需要去新的工程中重新build一条新的链,然后去任意1个节点下面的lib文件夹下面,找到libwasmer.so文件,然后直接替换到旧的链上的每个节点下面的lib文件下,如:

这里的libwasmer.so文件,就是用的231版本新编译出来的,直接替换在这里即可。

图片

问题四:日志太大磁盘不够存

引发风险:

在日常使用链的过程中,当开启debug或者数据量很大时,每个日志文件都会占用大量的磁盘空间,所以经常会导致磁盘写满使得整个链停止运行。

引发原因:

日志文件过大,且存储的日志文件过多,导致磁盘不够用。

规避建议:

如果遇到上述问题,可以修改log.yml文件,如图所示:

图片

max_age字段表示日志保存时长,上图表示日志可保留一年的日志,这里建议可以结合当前磁盘空间进行存储时长设置,比如:磁盘资源较少可以保存一个星期的日志。

问题五:docker容器kill不掉

引发风险:

执行stop脚本时,容器kill不掉,虽然执行结果提示成功,但是容器并没有kill掉;

图片

再次执行启动脚本时,提示先停掉容器;

图片

去查看容器状态时,发现容器没有停掉。

图片

引发原因:

docker状态管理异常。

规避建议:

如果遇到上述问题,直接手动kill掉docker容器,重启即可恢复正常。

问题六:[signal SIGBUS: bus error code=0x2 addr=0x7f6432119000 pc=0x1040a69]

引发风险:

当前出现这个panic时,节点则会宕机。

引发原因:

磁盘写满导致。

规避建议:

出现报错信息如下:

 

unexpected fault address 0x7f6432119000

fatal error: fault

[signal SIGBUS: bus error code=0x2 addr=0x7f6432119000 pc=0x1040a69]

goroutine 6139175623 [running]:

runtime.throw({0x317977a?, 0x1c23672?})

/usr/local/go/src/runtime/panic.go:992 +0x71 fp=0xc075a0d7c0 sp=0xc075a0d790 pc=0x100a811

runtime.sigpanic()

/usr/local/go/src/runtime/signal_unix.go:815 +0x125 fp=0xc075a0d810 sp=0xc075a0d7c0 pc=0x1021345

runtime.memmove()

这个报错其实就是磁盘写满了,只需要保证磁盘有空间,节点重启就不会再出现此类问题。

问题七:单笔交易可以上链,并发交易无法上链

问题现象:

报错日志如下

 

2023-09-07 22:05:57.610 [WARN]  [Access] ^[[31;1m@chain1^[[0m   accesscontrol/cert_ac.go:929    verify principal signer in cache failed, [endorsement: signer:<org_id:"wx-org1.chainmaker.org" member_info:"-----BEGIN CERTIFICATE-----\nMIICeDCCAh6gAwIBAgIDAZHSMAoGCCqBHM9VAYN1MIGKMQswCQYDVQQGEwJDTjEQ\nMA4GA1UECBMHQmVpamluZzEQMA4GA1UEBxMHQmVpamluZzEfMB0GA1UEChMWd3gt\nb3JnMS5jaGFpbm1ha2VyLm9yZzESMBAGA1UECxMJcm9vdC1jZXJ0MSIwIAYDVQQD\nExlj

2023-09-07 22:05:57.611 [ERROR] [Rpc]   rpcserver/api_service.go:205    tx verify failed, verify tx authentation failed, authentication error: authentication failed, [refine endorsements failed, all endorsers have failed verification], txId:1782a2ef16a10b54ca4e4407bba9cda556c35e6021bc47beb678c56a5c49d346, sender:2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d49494365444343416836674177494241674944415a48534d416f47434371424

2023-09-07 22:05:57.611 [WARN]  [Access] ^[[31;1m@chain1^[[0m   accesscontrol/cert_ac.go:1067   information for invalid signature:

sdk调用报错提示

 

______invoke result_________

Error: tx verify failed, verify tx authentation failed, authentication error: authentication failed, [refine endorsements failed, all endorsers have failed verification], txId:17aa7a7d0caf8e18ca6d6de7dd4135016c91030ddd294486ae93f082e3621544, sender:2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a3044415163445167414542745553663753445478656d5853484b674972626c727a514d3278780a336d716f414134764454596d3374785a356c666e414237444247794158355162617039514c63437263434e353657474f356947594e3753706c673d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a

引发风险:

权限校验失败,导致交易无法正常上链,报错信息常见关键日志如上

引发原因:

chainmaker-cryptogen工程丢失文件或者版本不正确、cryoto.hash配置不正确,如下图所示:

图片

规避建议:

出现上述问题,这里涉及到几个点,也是日常大家经常容易踩雷的地方,出现这个问题可以确定的是,证书肯定是存在问题了,我们要确认几个关键点:

  • 证书类型确认:检查当前使用的证书是否为国密或非国密类型;确保cmc命令或SDK参数与证书类型完全匹配。

  • 配置检查:在发送交易前,需检查使用的sdk_config.yml文件中crypto.hash字段配置是否与节点一致。

  • 命令与参数校验:如果cmc命令执行和SDK参数调用均无误,且单笔交易能成功上链,则需进一步检查以下内容。

  • chainmaker-cryptogen工程检查:确认所选分支是否正确;检查是否存在文件丢失的情况;若无法自行判断或确认,建议直接删除当前工程并重新拉取最新版本,然后创建软链接。

  • 证书更新操作:完成上述步骤后,重启链服务;将cmc目录下的新证书重新拷贝至相应位置(若通过SDK调用,同样需替换为新证书)。

 

#去chainmaker-go的tools目录下,安装证书,具体操作如下:

cd chainmaker-go/tools

git

#编译部署包:

cd chainmaker-go/tools/chainmaker-cryptogen

make

#编译部署失败,不通过,试试下面的:

git submodule update --init

# 进入工具目录

$ cd chainmaker-go/tools

# 软连接chainmaker-cryptogen到tools目录下

$ ln -s ../../chainmaker-cryptogen/ .

问题八:并发过程中出现panic,提示:cache add block fail,panic:time out goroutine xxxx

问题现象:

 

panic: time out [recovered]
panic: cache add block fail, panic: time out goroutine 86659 [running]:
runtime/debug.Stack(0xc0166f5590, 0xc02fc771d0, 0x7ff23c131170)
/usr/local/go/src/runtime/debug/stack.go:24 +0x9f
http://chainmaker.org/chainmaker-go/module/core/common.(*BlockCommitterImpl).AddBlock.func1(0xc013d5e7e0,
/chainmaker-go/module/core/common/block_helper.go:996 +0x56a
panic(0x30fb0e0, 0xc028b6b3a0)
/usr/local/go/src/runtime/panic.go:965 +0x1b9
http://chainmaker.org/chainmaker-go/module/core/common.(*CommitBlock).CommitBlock(0xc0007295e0,
/chainmaker-go/module/core/common/committer.go:59 +0xa3b
http://chainmaker.org/chainmaker-go/module/core/common.(*BlockCommitterImpl).AddBlock(0xc013d5e7e0,
/chainmaker-go/module/core/common/block_helper.go:1040 +0x890
http://chainmaker.org/chainmaker-go/module/core/syncmode.(*CoreEngine).OnMessage.func2(0xc02fdf6708,
/chainmaker-go/module/core/syncmode/core_syncmode_impl.go:177 +0x6d

引发风险:

出现上述panic问题,即便是重启了节点,也会出现这种问题。

引发原因:

磁盘io读写过高,导致程序在读取bfdb文件出现超时情况,程序自动给出panic。

规避建议:

出现上述问题,不要慌,我们从以下几个点去思考:

1.  你的节点是否存储在网络盘,如果存储在网络盘出现问题很正常,具体情况我们参看问题1;

2.  如果我们节点就是存储在本地盘,但是可能磁盘io较高导致我们读取存储文件超时,我们可以用以下方案解决:增加存储配置,read_bfdb_timeout: 10000,添加位置如下。

 

disable_block_file_db: false #是否禁用区块文件存储功能, 默认为true,也就是未启用,新节点建议此处设置为false。
logdb_segment_async: false #区块文件异步落盘与否, 默认为false,也就是默认同步落盘,异步落盘时存在断电后数据损坏风险。
logdb_segment_size: 128 #区块文件大小,单位MB,默认64MB。
read_bfdb_timeout: 10000 # 读取 bfdb 下区块文件的超时时间,单位ms, 默认: 1000,即1s。

问题九:拉取镜像报错:You have reached your pull rate limit

问题现象:

 

toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
make: *** [docker-build] Error 1

引发风险:

拉取镜像直接无法拉取。

引发原因:

这是因为使用Docker的时候没有登录,导致拉取代码有限制。

解决办法:

方案1(推荐方案),去长安链官网网站拉去镜像:

docker pull hub-dev.cnbn.org.cn/chainmakerofficial/chainmaker:v2.3.5

图片

方案2,去Docker官方网站注册账号:https://hub.docker.com/。

2.  Linux登录账号密码,命令为docker login:

3.  如图所示:

图片

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

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

相关文章

华为云创建ECS前台展示规格类型选项是怎么做到的?

前台展示很多规格可选&#xff0c;怎么做到的&#xff1f;先了解规格其实都是管理员在后台service_OM创建好规格 1.规格 1.1设置自定义标签打通规格和主机组还能体验调度功能 引申&#xff1a;AZ可用分区&#xff08;为了做容灾&#xff09; 为什么在界面可以让我√az0.dc0,…

Linux网络——自定义协议与序列化

一、协议 协议是一种 " 约定 ". socket api 的接口 , 在读写数据时 , 都是按 " 字符串 " 的方式来发送接收的。如 果我们要传输一些 " 结构化的数据 "&#xff0c;依然可以通过协议。 其实&#xff0c;协议就是双方约定好的结构化的数据。…

《TCP/IP网络编程》学习笔记 | Chapter 6:基于UDP的服务器端/客户端

《TCP/IP网络编程》学习笔记 | Chapter 6&#xff1a;基于UDP的服务器端/客户端 《TCP/IP网络编程》学习笔记 | Chapter 6&#xff1a;基于UDP的服务器端/客户端理解UDPUDP套接字的特点UDP内部工作原理UDP的高效使用 实现基于UDP的服务器端/客户端UDP中的服务器端和客户端没有连…

Linux也有百度云喔~

一、写在前面 经常有粉丝向我抱怨&#xff0c;为什么每次发放资料都用百度云&#xff0c;自己下载了一遍之后还得再上传一遍服务器才能分析。其实大家大可不必这么周转&#xff0c;百度云也有Linux的发行版本&#xff0c;利用python包bypy来管理/传输百度云盘资源也很方便(别问…

从0开始机器学习--Day23--支持向量机

经过前面的学习&#xff0c;我们已经知道在解决问题时&#xff0c;重要的不仅仅是要在算法A或算法B中选择更优的&#xff0c;而是考虑怎么选择用于学习算法的特征和正则化参数&#xff0c;相比神经网络和逻辑回归&#xff0c;支持向量机在这两个方面做得更好。 优化目标(Optimi…

JavaScript 中实例化生成对象的相关探讨

JavaScript 中实例化生成对象的相关探讨 在 JavaScript 世界中&#xff0c;对象的实例化是一个关键且基础的概念。当我们使用构造函数创建对象时&#xff0c;会引发一系列关于对象之间联系、原型链以及相关概念的思考。 让我们通过一段代码来深入探讨这些问题&#xff1a; f…

MatSci-LLM ——潜力和挑战以及大规模语言模型在材料科学中的应用

概述 大规模语言模型的出现正在从根本上改变技术开发和研究的方式。大规模语言模型不仅对自然语言处理领域产生了重大影响&#xff0c;而且对许多相关领域也产生了重大影响&#xff0c;例如从文本生成图像的计算机视觉&#xff08;Zhang 等人&#xff0c;2023 年&#xff09;。…

【C++】C++11特性(上)

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 一、列表初始化 二、std::initializer_list 三、右值引用和移…

Linux(光速安装+ubuntu镜像 serve live-serve desktop)

ubuntu镜像_ubuntu下载地址_ubuntu安装教程-阿里巴巴开源镜像站 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 清华大学的镜像好一点速度比较快&#xff01; 下载镜像 都是推荐使用服务器版&#xff0c;桌面版一般自己用 amd64 就…

Linux命令详解,全网最详细,看这一篇就够了

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

机器情绪及抑郁症算法

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月12日17点02分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17230869054974 计算机来理解你的情绪&a…

美食网的设计与实现

摘 要 随着科技的发展、生活水平的提升&#xff0c;人们更加注重饮食搭配和饮食健康。通过网络技术来加强美食与健康知识的普及是当前一种可行的措施。通过网页浏览美食网&#xff0c;不仅可以普及每道美食的做法&#xff0c;通过制作美食来缓解心情&#xff0c;还可以通过美…

Ubuntu[无桌面]——修改Docker镜像源文件

下载镜像的时候&#xff0c;一般有两种方式&#xff1a; &#xff08;1&#xff09;在宿主主机配置相应的文件/etc/docker/daemon.json&#xff0c;配置镜像源环境地址 &#xff08;2&#xff09;进入https://quay.io/search中&#xff0c;输入搜索需要下载的镜像名称&#xff…

ODOO学习笔记(8):模块化架构的优势

灵活性与可定制性 业务流程适配&#xff1a;企业的业务流程往往因行业、规模和管理方式等因素而各不相同。Odoo的模块化架构允许企业根据自身的具体业务流程&#xff0c;选择和组合不同的模块。例如&#xff0c;一家制造企业可以启用采购、库存、生产和销售模块&#xff0c;并通…

Git的使用(基础语句)

首先如果想要使用git的各项功能&#xff0c;我们要下载Git-2.40.1-64-bit.exe这个驱动程序&#xff0c;并安装它&#xff0c;这个资源我没有办法上传是因为有的博主已经上传过了&#xff0c;所以有VIP的或者有钱哥可以去csdn上自行下载&#xff0c;实在不行加我qq我发你4925396…

labview用sql server数据库存取数据到一个单元格

最近有一个项目上需要一个庞大的数据量&#xff0c;需要很多列&#xff0c;但是百度查了一下sqi server最多支持1024列&#xff0c;这一限制适用于大多数表类型&#xff0c;包括常规表&#xff0c;临时表和表变量&#xff0c;要注意的是如果超出这一限制可能会导致数据的完整性…

Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)

作者&#xff1a;来自 Elastic Benjamin Trent Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)。 嵌入模型输出 float32 向量&#xff0c;通常对于高效处理和实际应用来说太大。Elasticsearch 支持 int8 标量量化&#xff0c;以减小向量大小&#xff0c;同时保持性能。其他…

库打包工具 rollup

库打包工具 rollup 摘要 **概念&#xff1a;**rollup是一个模块化的打包工具 注&#xff1a;实际应用中&#xff0c;rollup更多是一个库打包工具 与Webpack的区别&#xff1a; 文件处理&#xff1a; rollup 更多专注于 JS 代码&#xff0c;并针对 ES Module 进行打包webpa…

2024中国游戏出海情况

01 哪里出海更花钱&#xff1f; 报告显示&#xff0c;中国手游在全球不同市场的获客成本不同&#xff0c;整体来看北美市场竞争更加激烈&#xff0c;其安卓和iOS获客成本是拉丁美洲的12倍和7倍。 按具体市场划分&#xff0c;获客成本最高的TOP 3为韩国、美国和日本&#xff0c…

【达梦数据库】MYSQL迁移到DM字符集转换问题-UTF8mb4|转UTF8(UTF8mb3)

目录 背景现象问题原因原因1&#xff1a;字符集不同原因2&#xff1a;以字节为单位 解决办法方法1&#xff1a;扩大长度 结果验证MYSQLDTSDM 背景 迁移过程环境信息如下&#xff1a; 数据库版本字符集补充MYSQL8.0.xxUTF8mb4DM8.1.3.162UTF8&#xff08;UTF8mb3的简称&#x…