当前位置: 首页 > news >正文

深圳专业网站优化公司报价网上挣钱最快的平台

深圳专业网站优化公司报价,网上挣钱最快的平台,国家企业信用信息公示系统入口,怎么做好网站开发、设计如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更#xff0c;出现了一个 crash问题#xff0c;底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题#xff0c;在这篇文章中以实际工作中resize导致crash为例#xff0c;引出如何… 如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更出现了一个 crash问题底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题在这篇文章中以实际工作中resize导致crash为例引出如何进行系统性分析希望可以帮助大家 在最后给社区提了一个pr感兴趣可以去查阅。 https://github.com/apache/arrow/pull/40817 背景 最近想修改一下arrow batch的大小当调整为65536后发现crash出现 terminate called after throwing an instance of std::length_errorwhat():  vector::_M_default_append 然后通过捕获异常gdb找到异常位置最后拿到堆栈发现位置是在join里面构建哈希表侧的partition数组出了问题 prtn_state.key_ids.resize(num_rows_before  num_rows_new); 即问题转化为resize操作为何引发throw 研究了一下STL代码发现会遇到两种场景先把STL代码精简一下贴出来给大家看看 if (__navail  __n) {const size_type __len _M_check_len(__n, vector::_M_default_append);}size_type _M_check_len(size_type __n, const char* __s) const {if (max_size() - size()  __n)__throw_length_error(__N(__s)); } 其中最核心的就是_M_check_len函数看到这个判断能想起哪两种场景呢 场景1内存确实不足了超过了vector的max_size此时会抛这个异常。场景2__n传递的是一个负数由于是size_t类型则会变为超大值从而抛出异常。 场景1在我们系统当中通过查看内存不会遇到于是转到场景2首先是猜测是个负数然后搞了个log包上去测试发现确实是这个问题可以看到rows_new变为负数了。 part id 15, dop_  105,prtnid  1 ranges  0,prtnid ranges  61434, part size:0, rows_new: -61434, cap: 0 既然这里知道原因了那么下一步就得继续分析为何会产生负数 num_rows_new是有分区的range决定的下面有个公式计算产生了负数 int num_rows_new locals.batch_prtn_ranges[prtn_id  1] - locals.batch_prtn_ranges[prtn_id]; 继续跟进找到PartitionSort的Eval里面有几处非常需要注意 ARROW_DCHECK(num_rows  0  num_rows  (1  15)); 首先第一个是这个断言我明明传递的是65536明显大于这里的32768为何没有断言成功事后发现这里是release包只会报warning不会fatal。 随后继续往下看看到了一个比较明显的类型uint16_t这个玩意就是在计算sum而要让num_rows_new为负数只有两种可能 场景1: locals.batch_prtn_ranges[prtn_id 1] locals.batch_prtn_ranges[prtn_id]场景2:  locals.batch_prtn_ranges[prtn_id 1] 是负数且locals.batch_prtn_ranges[prtn_id]是负数或者locals.batch_prtn_ranges[prtn_id 1] 是负数且locals.batch_prtn_ranges[prtn_id]也是负数并且大于前者。 uint16_t sum  0; for (int i  0; i  num_prtns; i) {uint16_t sum_next  sum  prtn_ranges[i  1];prtn_ranges[i  1]  sum;sum  sum_next; } 看了这段代码可以知道场景1排除了因为是自增的最差情况是相等那么就只能场景2变为负数就不用说了又碰到了溢出问题所以可以推测uint16_t溢出了这个值我们知道是65535而65536刚好超过它所以有问题 至此这一轮的debug调试与分析到此结束 往期干货 热度更新手把手实现工业级线程池 快速拿下面试算法
http://www.w-s-a.com/news/951006/

相关文章:

  • 网站备案为什么这么慢目录更新 wordpress
  • 视频在线制作网站Wordpress 外链图片6
  • 网站域名后缀有什么用网站建设的投资预算怎么写
  • 化妆品网站建设网站惠州网站关键字优化
  • 保定网站制作企业下载天眼查企业查询官网
  • 中山企业网站建设公司制作一个景点的网站
  • 连云港集团网站建设株洲建设网站
  • 做运动鞋评价的网站南山做网站联系电话
  • 网站开发公众号开发海南做公司网站
  • 论企业网站建设的必要性微信小程序做一个多少钱
  • 网站制作价格是多少元上海市中小企业服务中心
  • 网站建设管理人员济宁网站建设top
  • 桂林网站建设桂林网站的元素有哪些
  • 广东网站开发推荐网页制作个人简历模板教程
  • e建网保定百度seo公司
  • 网站建设中html代码网络培训课堂app
  • 无锡做网站seo自己做的网站如何上传网上
  • 园林景观网站模板小白怎么做跨境电商
  • 找第三方做网站 需要注意企业网站带数据库
  • 北京南站到北京站flash网站制作单选框和复选框ui组件
  • 网站建设核电集团网站设计案例
  • 宝塔做的网站能不能访问上海的广告公司网站建设
  • 网站会员系统方案新能源网站建设哪家好
  • 全球网站域名域名被墙查询
  • 做期货看资讯什么网站好哈尔滨网站设计联系方式
  • 建站宝盒免费下载上海网论坛网址
  • 国内最有趣的25个网站推广流程
  • 红河做网站抖音小程序怎么挂到抖音上
  • 高度重视机关门户网站建设外包
  • 网站里面送礼物要钱怎么做代码网站开发怎么对接客户