中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網(wǎng)站可以微信支付是怎么做的百度熱詞

網(wǎng)站可以微信支付是怎么做的,百度熱詞,昆明設(shè)計網(wǎng)站建設(shè),百度快照查詢?nèi)肟谌绾卧赼pache Arrow定位與解決問題 最近在執(zhí)行sql時做了一些batch變更,出現(xiàn)了一個 crash問題,底層使用了apache arrow來實現(xiàn)。本節(jié)將會從0開始講解如何調(diào)試STL源碼crash問題,在這篇文章中以實際工作中resize導致crash為例,引出如何…

如何在apache Arrow定位與解決問題

最近在執(zhí)行sql時做了一些batch變更,出現(xiàn)了一個 crash問題,底層使用了apache arrow來實現(xiàn)。本節(jié)將會從0開始講解如何調(diào)試STL源碼crash問題,在這篇文章中以實際工作中resize導致crash為例,引出如何進行系統(tǒng)性分析,希望可以幫助大家~

在最后給社區(qū)提了一個pr,感興趣可以去查閱。

https://github.com/apache/arrow/pull/40817

背景

最近想修改一下arrow batch的大小,當調(diào)整為65536后發(fā)現(xiàn)crash,出現(xiàn):

terminate?called?after?throwing?an?instance?of?'std::length_error'what():??vector::_M_default_append

然后通過捕獲異常gdb找到異常位置,最后拿到堆棧,發(fā)現(xiàn)位置是在join里面構(gòu)建哈希表側(cè)的partition數(shù)組出了問題:

prtn_state.key_ids.resize(num_rows_before?+?num_rows_new);

即問題轉(zhuǎn)化為:resize操作為何引發(fā)throw?

研究了一下STL代碼發(fā)現(xiàn),會遇到兩種場景,先把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函數(shù),看到這個判斷能想起哪兩種場景呢?

  • 場景1:內(nèi)存確實不足了,超過了vector的max_size,此時會拋這個異常。

  • 場景2:__n傳遞的是一個負數(shù),由于是size_t類型,則會變?yōu)槌笾?#xff0c;從而拋出異常。

場景1在我們系統(tǒng)當中通過查看內(nèi)存不會遇到,于是轉(zhuǎn)到場景2,首先是猜測是個負數(shù),然后搞了個log包,上去測試發(fā)現(xiàn)確實是這個問題,可以看到rows_new變?yōu)樨摂?shù)了。

part?id?15,?dop_?=?105,prtnid?+?1?ranges?=?0,prtnid?ranges?=?61434,?part?size:0,?rows_new:?-61434,?cap:?0

既然這里知道原因了,那么下一步就得繼續(xù)分析為何會產(chǎn)生負數(shù)?

num_rows_new是有分區(qū)的range決定的,下面有個公式計算產(chǎn)生了負數(shù)

int?num_rows_new?=locals.batch_prtn_ranges[prtn_id?+?1]?-?locals.batch_prtn_ranges[prtn_id];

繼續(xù)跟進找到PartitionSort的Eval,里面有幾處非常需要注意:

ARROW_DCHECK(num_rows?>?0?&&?num_rows?<=?(1?<<?15));

首先第一個是這個斷言,我明明傳遞的是65536,明顯大于這里的32768,為何沒有斷言成功?事后發(fā)現(xiàn)這里是release包,只會報warning,不會fatal。

隨后繼續(xù)往下看,看到了一個比較明顯的類型uint16_t,這個玩意就是在計算sum,而要讓num_rows_new為負數(shù),只有兩種可能:

  • 場景1: locals.batch_prtn_ranges[prtn_id + 1] < locals.batch_prtn_ranges[prtn_id]

  • 場景2: ?locals.batch_prtn_ranges[prtn_id + 1] 是負數(shù)且locals.batch_prtn_ranges[prtn_id]是負數(shù)或者locals.batch_prtn_ranges[prtn_id + 1] 是負數(shù)且locals.batch_prtn_ranges[prtn_id]也是負數(shù)并且大于前者。

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,變?yōu)樨摂?shù)就不用說了,又碰到了溢出問題,所以可以推測uint16_t溢出了,這個值我們知道是65535,而65536剛好超過它,所以有問題!

至此,這一輪的debug調(diào)試與分析到此結(jié)束~


往期干貨:

熱度更新,手把手實現(xiàn)工業(yè)級線程池

快速拿下面試算法

49615ca9a56cb2fa9d157574f174575a.jpeg

af5ee136df9e4b4a20f1c236c214662a.jpeg

http://m.risenshineclean.com/news/32886.html

相關(guān)文章:

  • 公司網(wǎng)站的seo優(yōu)化怎么做百度網(wǎng)盤人工客服電話多少
  • 不會網(wǎng)站維護可以做嗎怎么開通百度推廣賬號
  • 北京上海網(wǎng)站建設(shè)公司品牌宣傳推廣文案
  • 網(wǎng)站優(yōu)化的策略鎮(zhèn)江網(wǎng)站建設(shè)企業(yè)
  • 北京電腦培訓網(wǎng)站軟文廣告示范
  • 上傳網(wǎng)站到二級域名財經(jīng)新聞最新消息
  • 昆明網(wǎng)上商城網(wǎng)站建設(shè)市場營銷策略
  • 寵物網(wǎng)站開發(fā)與實現(xiàn)軟文推廣做得比較好的推廣平臺
  • 做集團網(wǎng)站應注意什么谷歌seo優(yōu)化技巧
  • 做家居商城網(wǎng)站鄭州seo推廣
  • 怎么把網(wǎng)站放到空間嗎教育培訓機構(gòu)平臺
  • 公眾號的微網(wǎng)站開發(fā)營銷型網(wǎng)站建設(shè)排名
  • 南京代做網(wǎng)站濟南百度競價代運營
  • c 做網(wǎng)站如何調(diào)用dll免費源碼網(wǎng)站
  • 公司怎么建立自己網(wǎng)站百度推廣價格價目表
  • php app網(wǎng)站建設(shè)武漢seo管理
  • 藍色大氣網(wǎng)站欣賞視頻推廣平臺
  • 手機企業(yè)網(wǎng)站制作企業(yè)網(wǎng)頁設(shè)計公司
  • 網(wǎng)站建設(shè)夢幻創(chuàng)意百度文庫官網(wǎng)
  • php做的網(wǎng)站安全嗎今天的新聞頭條
  • 什么公司在百度做網(wǎng)站常州seo關(guān)鍵詞排名
  • 做網(wǎng)站實習日志寧波seo怎么做引流推廣
  • 陽泉購物網(wǎng)站開發(fā)設(shè)計市場營銷策劃
  • 網(wǎng)站網(wǎng)絡(luò)廣告如何建設(shè)自助建站免費搭建個人網(wǎng)站
  • 織夢網(wǎng)站后臺關(guān)鍵詞推廣優(yōu)化app
  • 婚禮顧問網(wǎng)站介紹模版有哪些營銷推廣方式
  • 用php做動態(tài)網(wǎng)站嗎企業(yè)中層管理人員培訓課程
  • 手機網(wǎng)站內(nèi)容模塊如何進行網(wǎng)站宣傳推廣
  • 58網(wǎng)站怎么做優(yōu)化迅雷磁力鏈bt磁力種子
  • 合肥疫情風險等級思億歐seo靠譜嗎