首先,祝大家新年快樂!應該陸陸續續開始踏上了回家的征程吧!
生產事故
產品上線一段時間之后,技術支持反饋客戶現場一個進程總是掛掉或者不干活!最開始不緊不慢的查找問題,后來老大很生氣說:生產事故很嚴重,你們居然不重視!成立了一個應急小組,專門解決此問題,其中包括我!
事故原因
經過2、3天沒日沒夜的艱苦奮斗,終於找到進程掛掉的原因,問題因我而起。大約去年8月,做一個項目,與大數據對接,把數據推給它,然在加上了推送部分的代碼,最開始那個模塊是沒有日志的,然后給加上了日志打印,當時也沒考慮那么多,多線程環境,那個函數是線程不安全的,然后高並發環境,會造成進程掛掉!
問題分析
高並發環境下,主要涉及兩方面問題:
1、一個線程關閉了一個文件,另一個線程以為文件還是打開的,繼續往文件里寫數據,這樣會導致進程掛掉(函數對線程是否安全!)
2、多線程環境共享全局變量,會造成數據混亂;alarm函數產生的SIGALRM信號,無法估算時間,此處理不嚴謹(最好不要在線程中用信號)。
解決問題
解決方法
- 在進程最開始打印日志,或不打印日志
- 移動代碼位置,在正確位置修改代碼
加班到11點,把這部分代碼重新修改了!
之后,老大找我談話:一個優秀程序員必須經歷各種問題和bug,才能成長;還有以后修改問題,要謹慎!並沒有很嚴厲的批評,但心里還是很難受!有人說過:如果跟着一個好老大,就好好地干幾年!
總結
從小就不怎么犯錯,犯過一個錯,會很內疚!可能這個問題會伴隨整個職業生涯,督促自己成長!
1、謹慎!不管對公司或其它怎么樣?但一定要對自己寫的每一行代碼負責;要多去思考為啥之前沒有日志?所以要謹慎!公司並沒有獎懲措施,努力工作也沒什么獎勵,犯錯也不會狠狠批評或扣工資之類的,不知道這樣是好是壞?
2、謙虛學習!還有很多東西要學習!一定要謙虛學習!之前犯錯可能會選擇逃避,但這次很勇敢發郵件承認錯誤說明原因!
最后,希望對大家能有幫助,大家加油!