偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

奪命故障!炸出了投資人!

安全 應(yīng)用安全
我聽(tīng)說(shuō),牛x的人,都關(guān)注整體,不關(guān)注細(xì)節(jié),因?yàn)樗麄冇X(jué)得沒(méi)必要;我也聽(tīng)說(shuō),管理的哲學(xué),就是協(xié)調(diào)資源,讓人俯首甘為孺子牛,不達(dá)目的不罷休。

本文轉(zhuǎn)載自微信公眾號(hào)「小姐姐味道」,作者小姐姐養(yǎng)的狗。轉(zhuǎn)載本文請(qǐng)聯(lián)系小姐姐味道公眾號(hào)。

我聽(tīng)說(shuō),牛x的人,都關(guān)注整體,不關(guān)注細(xì)節(jié),因?yàn)樗麄冇X(jué)得沒(méi)必要;我也聽(tīng)說(shuō),管理的哲學(xué),就是協(xié)調(diào)資源,讓人俯首甘為孺子牛,不達(dá)目的不罷休。

在這種環(huán)境下耳濡目染很多年,人生就有一股若有若無(wú)的錯(cuò)覺(jué):管理可以解決一切問(wèn)題。如果管理解決不了,那一定是流程的問(wèn)題。

但看了PDD這種企業(yè)的管理方式以后,信仰再次轉(zhuǎn)折,我又覺(jué)得這是錯(cuò)誤的。PDD的管理模式,打臉了所有高校的《管理學(xué)》課程,讓所有從事管理工作的人,顏面掃地。

只要錢(qián)給夠,不需要什么管理!只有沒(méi)錢(qián)的窮B公司才在哪里文鄒鄒的搞管理。要說(shuō)高能的、正統(tǒng)的管理學(xué),那非傳銷莫屬。

話說(shuō)的有點(diǎn)遠(yuǎn),已經(jīng)進(jìn)入了跑題的路上,我們需要用一個(gè)故障把它拉回來(lái)。

1. 出故障了

沒(méi)辦法,干it這一行,就得天天面對(duì)故障,大家就是傳說(shuō)中的消防員,到處救火。不過(guò),這次的故障范圍有點(diǎn)大,宿主機(jī)都打不開(kāi)了。

好在監(jiān)控系統(tǒng)留下了一些證據(jù)。

證據(jù)發(fā)現(xiàn),機(jī)器的CPU、內(nèi)存、文件句柄,隨著業(yè)務(wù)的增長(zhǎng),持續(xù)的上升...上升....,直到監(jiān)控也無(wú)法將信息收集上來(lái)。

要命的是,這些宿主機(jī)上,部署了非常多的Java進(jìn)程。沒(méi)別的原因,就是為了節(jié)省成本,混部了應(yīng)用。當(dāng)宿主機(jī)表現(xiàn)出整體性的異常時(shí),就難以找到罪魁禍?zhǔn)住?/p>

因?yàn)檫h(yuǎn)程登錄也Over,暴躁的運(yùn)維只能重啟機(jī)器,重啟機(jī)器之后開(kāi)始重啟應(yīng)用。經(jīng)過(guò)漫長(zhǎng)的等待,所有的進(jìn)程都活了,但是,僅僅過(guò)了片刻,宿主機(jī)又立即死去。

業(yè)務(wù)一直處于死翹翹的狀態(tài),真是讓人惱火啊。也讓人心急。嘗試過(guò)幾次之后,運(yùn)維崩潰了,啟動(dòng)了緊急預(yù)案:回滾!

最近的上線記錄有點(diǎn)多,而且有開(kāi)發(fā)人員私自上線部署的行為,運(yùn)維蒙圈了:回滾哪些呢?還好有人腦瓜一亮,想起了還有find這個(gè)命令,那就找到最近更新的所有jar包,都給它來(lái)次回滾吧。

  1. find /apps/deploy -mtime +3 | grep jar$ 

如果你不知道find這個(gè)命令,那可還真的是一場(chǎng)災(zāi)難。還好有人知道。

把十來(lái)個(gè)jar包回滾,還好沒(méi)有碰到數(shù)據(jù)庫(kù)的schema變更,系統(tǒng)終于正常運(yùn)行了。

2. 找原因

沒(méi)別的辦法,查日志,進(jìn)行代碼審查。

代碼審查要追溯到最近1周或者2周之內(nèi)的代碼改動(dòng),因?yàn)橛行┕δ艽a要沉淀一段時(shí)間,才能到線上風(fēng)光一把。

看著滿屏的提交記錄“OK”,技術(shù)經(jīng)理的臉都綠了。

“xjjdog說(shuō)過(guò),《80%的程序員,不會(huì)寫(xiě)commit記錄》,我看你們是100%都不會(huì)寫(xiě)”。

大家都靜悄悄的,忍著痛翻查歷史變更。經(jīng)過(guò)大家的不懈努力,終于在屎山之間,找到了一些問(wèn)題代碼。CxO親自建了個(gè)群,大家一股腦的把可能會(huì)出問(wèn)題的代碼,扔到了群里面。

"系統(tǒng)服務(wù)中斷了接近一個(gè)小時(shí),影響非常惡劣",CxO說(shuō),“務(wù)必把問(wèn)題徹底解決掉,這個(gè)問(wèn)題投資人非常關(guān)注”!

okokok,有了釘釘?shù)闹?,大家的手?shì)都變得整齊劃一。

3. 線程池的參數(shù)

代碼有點(diǎn)多,大家對(duì)問(wèn)題代碼討論了老久。包括一些使用并行流的,還有套在lamba表達(dá)式里的炫技代碼,還重點(diǎn)排查了一些線程池的使用代碼。

最后大家決定還是對(duì)線程池的代碼再過(guò)一遍。其中有一段是這么寫(xiě)的。

  1. RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardOldestPolicy(); 
  2. ThreadPoolExecutor executor = new ThreadPoolExecutor(100,200, 
  3.                 60000, 
  4.                 TimeUnit.MILLISECONDS, 
  5.                 new LinkedBlockingDeque<>(10), 
  6.                 handler); 

還別說(shuō),參數(shù)有模有樣的,甚至考慮到了拒絕策略。

Java的線程池,使得編程變的非常簡(jiǎn)單。它有很多參數(shù),如上圖,我們一一介紹一下,否則代碼是無(wú)法審查的。

  • corePoolSize:核心線程數(shù),核心線程創(chuàng)建后會(huì)一直存活
  • maxPoolSize:最大線程數(shù)
  • keepAliveTime:線程空閑時(shí)間
  • workQueue:阻塞隊(duì)列
  • threadFactory:線程創(chuàng)建工廠
  • handler:拒絕策略

下面來(lái)介紹一下它們的關(guān)系。

當(dāng)線程數(shù)小于核心線程數(shù)的時(shí)候,有新的任務(wù)到來(lái),將會(huì)生成一個(gè)新的線程進(jìn)行服務(wù)。當(dāng)當(dāng)前線程數(shù)大于核心線程數(shù),而且阻塞隊(duì)列未滿的時(shí)候,將會(huì)把任務(wù)放在阻塞隊(duì)列中。當(dāng)線程數(shù)大于核心線程數(shù),而且阻塞隊(duì)列滿了的時(shí)候,將會(huì)創(chuàng)建新的線程進(jìn)行服務(wù),直到線程數(shù)到達(dá)maximumPoolSize的大小。此時(shí),如果還有新的任務(wù),將觸發(fā)拒絕策略。

再說(shuō)一下拒絕策略。jdk默認(rèn)實(shí)現(xiàn)了4種策略,默認(rèn)實(shí)現(xiàn)的是AbortPolicy,也就是直接拋出異常。下面介紹其他幾種。

  • DiscardPolicy 比abort更加激進(jìn),直接丟掉任務(wù),連異常信息都沒(méi)有
  • CallerRunsPolicy 由調(diào)用的線程來(lái)處理這個(gè)任務(wù)。比如一個(gè)web應(yīng)用中,線程池資源占滿后,新進(jìn)的任務(wù)將會(huì)在tomcat線程中運(yùn)行。這種方式能夠延緩部分任務(wù)的執(zhí)行壓力,但在更多情況下,會(huì)直接阻塞主線程的運(yùn)行
  • DiscardOldestPolicy 丟棄隊(duì)列最前面的任務(wù),然后重新嘗試執(zhí)行任務(wù)

這段線程池的代碼是新加的,參數(shù)設(shè)置還算正常,并沒(méi)有什么大的問(wèn)題。唯一有可能的風(fēng)險(xiǎn),就是使用DiscardOldestPolicy 的拒絕策略。當(dāng)任務(wù)非常多的時(shí)候,這個(gè)拒絕策略會(huì)造成任務(wù)排隊(duì),請(qǐng)求超時(shí)。

當(dāng)然不能放過(guò)這種風(fēng)險(xiǎn),說(shuō)實(shí)話也是到現(xiàn)在為之能夠找到的最可能的風(fēng)險(xiǎn)代碼了。

"把DiscardOldestPolicy 改成默認(rèn)的AbortPolicy吧,重新打包上線一下試試“。技術(shù)大牛在群里說(shuō)。

4. 問(wèn)題在哪里?

結(jié)果,服務(wù)灰度上線之后,宿主機(jī)不多時(shí),就死掉了。是它的原因沒(méi)跑了,但是why?

線程池的大小 ,最小100,最大200,說(shuō)什么也不過(guò)分。阻塞隊(duì)列的容量只有10,說(shuō)什么也不會(huì)造成問(wèn)題。你要說(shuō)是這個(gè)線程池造成的原因,打死我都不信。

但是業(yè)務(wù)部門(mén)反饋,這段代碼加上就死,不加就沒(méi)事。技術(shù)大牛們抓耳撓腮百思不得其姐。

到最后,終于有人忍不住了,下載下業(yè)務(wù)的代碼打算調(diào)試一下。

當(dāng)他打開(kāi)Idea的時(shí)候,瞬間懵逼了,又瞬間領(lǐng)悟了。他終于明白了這段代碼為什么會(huì)產(chǎn)生問(wèn)題了。

線程池,竟然是在方法里創(chuàng)建的!

當(dāng)每一個(gè)請(qǐng)求到來(lái)的時(shí)候,它都會(huì)創(chuàng)建一個(gè)線程池,直到系統(tǒng)再也無(wú)法分配資源為止。

可真是霸道啊。

所有人都在關(guān)注線程池的參數(shù)是怎么設(shè)置的,但從來(lái)沒(méi)有人懷疑這段代碼所在的位置。

5. 結(jié)尾

問(wèn)題低級(jí)又常見(jiàn),現(xiàn)在我嚴(yán)重懷疑拒絕策略也是網(wǎng)上拷貝的代碼。

那么多碼農(nóng),熬夜選擇了個(gè)業(yè)務(wù)低峰期進(jìn)行上線,還是躲不過(guò)命啊,躲不過(guò)豬隊(duì)友的傷害。

當(dāng)然,這還說(shuō)明了另外一個(gè)問(wèn)題:技術(shù)能力跟不上,再牛的管理也愛(ài)莫能助。

最后,連投資人都施壓的故障,幾乎沒(méi)有人愿意去實(shí)際的翻一下業(yè)務(wù)的代碼看看。這得多大的屎山,才讓人這樣避而遠(yuǎn)之,生怕把自己的羽毛染臭啊!

 

作者簡(jiǎn)介:小姐姐味道 (xjjdog),一個(gè)不允許程序員走彎路的公眾號(hào)。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。我的個(gè)人微信xjjdog0,歡迎添加好友,進(jìn)一步交流。

 

責(zé)任編輯:武曉燕 來(lái)源: 小姐姐味道
相關(guān)推薦

2013-08-12 17:09:10

創(chuàng)業(yè)投資

2018-09-18 14:08:21

管理

2021-05-24 10:15:54

投資人榜單

2017-11-17 08:59:00

2021-04-02 14:58:46

投資界基金合伙人

2010-03-11 10:07:31

谷歌前員工天使投資人

2012-06-11 15:12:43

Windows Pho

2015-06-25 11:04:03

天使投資人

2014-05-21 15:42:25

2011-09-13 09:46:10

創(chuàng)業(yè)速度隱蔽

2021-11-17 05:56:03

芯片芯片發(fā)展芯片市場(chǎng)

2009-09-21 09:58:15

GNOME和KDE

2015-12-08 10:39:17

Dropbox關(guān)閉服務(wù)云存儲(chǔ)

2017-09-25 08:58:19

技術(shù)投資人忠告

2022-02-16 14:55:47

創(chuàng)業(yè)投資界

2023-02-17 11:40:41

女性 投資人

2015-11-23 11:12:42

SaaS創(chuàng)業(yè)投資人

2019-03-03 15:23:43

2021-03-08 09:58:36

女神節(jié)投資圈

2022-08-01 10:15:00

科技產(chǎn)業(yè)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)