国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

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

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

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

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

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

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

背景

最近想修改一下arrow batch的大小,當(dāng)調(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ù),看到這個(gè)判斷能想起哪兩種場景呢?

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

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

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

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

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

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

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

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

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

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

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

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

  • 場景2: ?locals.batch_prtn_ranges[prtn_id + 1] 是負(fù)數(shù)且locals.batch_prtn_ranges[prtn_id]是負(fù)數(shù)或者locals.batch_prtn_ranges[prtn_id + 1] 是負(fù)數(shù)且locals.batch_prtn_ranges[prtn_id]也是負(fù)數(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排除了,因?yàn)槭亲栽龅?#xff0c;最差情況是相等,那么就只能場景2,變?yōu)樨?fù)數(shù)就不用說了,又碰到了溢出問題,所以可以推測uint16_t溢出了,這個(gè)值我們知道是65535,而65536剛好超過它,所以有問題!

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


往期干貨:

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

快速拿下面試算法

49615ca9a56cb2fa9d157574f174575a.jpeg

af5ee136df9e4b4a20f1c236c214662a.jpeg

http://aloenet.com.cn/news/32886.html

相關(guān)文章:

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