海豚擱淺金門岸際死亡 今年第四起

摘錄自2020年3月13日中央社報導

金馬澎分署第九(金門)岸巡隊12日指出,金沙鎮海珊美岸際發現1隻死亡海豚,無明顯外傷,死因不明,經比對品種為露脊鼠海豚。這是2020年金門地區第4起海豚擱淺死亡案例。

金門岸巡隊發布新聞稿表示,岸巡隊第一機動巡邏站11日下午在金沙鎮海珊美岸際發現1隻死亡海豚,長約145公分、高約20公分、寬約40公分,整體外觀大致良好,無明顯外傷,死亡原因待查。

金門岸巡隊指出,發現海豚擱淺死亡後,通報中華鯨豚協會、金門縣政府建設處漁牧科等單位派員到場處理,經比對發現這隻海豚品種為露脊鼠海豚。海豚在就地掩埋前,縣府人員已採集檢體,藉以判斷死亡原因。

【其他文章推薦】

※廢氣洗滌塔,叫得動, 找得到的專業廠商‎

※市面十大品牌封口機!該如何選購?

塑膠射出成型加工商品有哪些?

貨梯使用安全與保養

※掌握產品行銷策略,帶你認識商品包裝設計基本要素

臭氧機推薦

高雄國喬異常排放黑煙 環保局蒐證將裁罰

摘錄自2020年3月13日中央社報導

高雄市仁大工業區國喬公司製程12日起爐時,疑因燃燒不完全產生大量明顯粒狀污染物(黑煙),高市環保局據報趕往蒐證,後續將依空污法依法裁罰。

高市環保局環境稽查科指出,仁大工業區國喬公司苯乙烯製程中午12時許進行起爐作業,疑因燃油流量操作異常,導致大量黑煙產生,明顯粒狀污染物散布於空氣中,稽查人員即刻至現場掌握污染情形並蒐證。

高市環保局環境稽查科持續於廠區周界監控空氣品質,並要求業者加強落實污染設備操作,以維護空氣品質,平時應加強檢修及維護保養,避免排放或逸散空氣污染。

【其他文章推薦】

※使用真空封口機常見問題?

※影響示波器測試準確度的五大因素

※各大百貨每波促銷贈品活動,限量知名LOGOL型資料夾,獨家販售中!!

※哪裡有合版印刷優惠,尋找L夾客製化印刷廠商?

※如何正確使用飲水機?

洗滌塔運作原理介紹

無塵擦拭布各大品牌廠商販售比價網!

竹北縣政九路南段易淹水 獲前瞻6150萬改善排水

摘錄自2020年3月13日聯合報報導

新竹縣竹北市縣政九路南段過去曾遇豪雨淹水,縣府向中央爭取前瞻基礎建設經費6150萬元,辦理「竹北市縣政九路雨水下水道工程」,預計2021年3月完工,完工後可有效改善竹北市興隆路一段及縣政九路地區的排水瓶頸問題。

縣長楊文科表示,因氣侯暖化及極端氣候現象,容易造成瞬間降下豪大雨的情形,加上都市的更新與擴張、綠地減少,雨水無法快速滲透到地下排除,易發生積、淹水,因此,道路下方的雨水下水道排水設施建設相當重要。 為此,縣府爭取「前瞻基礎建設計畫-水環境建設-水與安全-縣市管河川及區域排水整體改善計畫-下水道及都市區其他排水」計畫,竹北市縣政九路雨水下水道工程獲核定經費6150萬元,且是全額補助。 

【其他文章推薦】

※(全省)堆高機租賃保養一覽表

※高效率洗滌塔活性碳設備,能去除多少有機溶劑?

塑膠射出成型技師工作甘苦談

※人氣推薦-獨家專業技術熱傳導玻璃煎台

※推薦優質工業用攪拌機製作商

臭氧機推薦

【其他文章推薦】

※(全省)堆高機租賃保養一覽表

※高效率洗滌塔活性碳設備,能去除多少有機溶劑?

塑膠射出成型技師工作甘苦談

※人氣推薦-獨家專業技術熱傳導玻璃煎台

※推薦優質工業用攪拌機製作商

臭氧機推薦

苗栗縣八成山坡地 違反水保法未限期改善累計開罰逾百萬

摘錄自2020年3月13日聯合報報導

苗栗縣有「山城」美稱,全縣18鄉鎮都有山坡地,其中5個鄉鎮是全坡地,民眾在開發、開挖整地前,都須符合水土保持法規範,苗栗縣水利處統計,2019年違反水土保持法122件,要求限期改正完成110件,仍有11件未完成改正事項,依法開罰,11件累計開罰114萬元。

11件未完成改正事項中,開罰最高30萬元1件,是位在通霄的五里牌,業者違規傾倒土方,還以做水土保持的名義,又繼續違規,且是累犯,水利處接連多次開罰,該業者違反兩次水土保持法,兩次各開罰20萬元,另外未依在限期內改正,第一次開罰24萬、第二次開罰30萬元,光是此案,開罰共94萬元。

【其他文章推薦】

※連續封口機購物網-不怕你比價,就怕你買貴!

※測試專家告訴你如何好好使用示波器

※多功能滑鼠墊、多用途卡套、全客製贈品節慶促銷活動開跑中  

※廢氣洗滌塔,叫得動, 找得到的專業廠商‎

※快速搞懂塑膠射出成型原理

※(全省)堆高機租賃保養一覽表

※客製化探針、鐘錶等細小電子零組件車製

設立野味養殖分會 中國野生動物保護協會挨罰

摘錄自2020年3月13日經濟日報報導

中國民政部昨天通報,近日對中國野生動物保護協會違規設立分支機構的行為,作出警告的行政處罰,並責令撤銷。這些分會包括養殖蛙類、蛇類、大鯢(娃娃魚)、鱘魚等野生動物。

武漢肺炎疫情爆發後,中國人大常委會2月24日宣示「全面禁食野生動物」,中國野保協會積極呼應政府立場,還組織民間企業共同推展公益宣傳,呼籲民眾「拒絕食用野生動物,從口做起」。但該協會卻下設多個養殖販售野味的分會,遭陸民譏為「邪會」。

中國野保協會下屬機構「蛙類養殖專業委員會」,2月16日發表一篇「野生動物養殖是人類祖先的偉大創舉」的文章,引發社會廣泛爭議。文章稱,因一次疫情就全面「禁野」將是武斷的,不科學、不理性。

2月18日,中國野保協會發布聲明稱,對該文章給社會造成的不良影響,深表歉意。針對「有關組織」反映的問題,已決定撤銷蛙類養殖專業委員會。

【其他文章推薦】

※影響示波器測試準確度的五大因素

※全自動飲水機與一般飲水機差異在哪?

※噴霧洗滌塔實際應用案例分享

貨梯使用安全與保養

※幫你考照過關,堆高機裝卸操作教學影片大公開 !

※早餐店適用哪種商用煎台呢?

板式熱交換器規格有哪些?

金門岸巡隊發布新聞稿表示

金門岸巡隊發布新聞稿表示,岸巡隊第一機動巡邏站11日下午在金沙鎮海珊美岸際發現1隻死亡海豚,長約145公分、高約20公分、寬約40公分,整體外觀大致良好,無明顯外傷,死亡原因待查。

金門岸巡隊指出,發現海豚擱淺死亡後,通報中華鯨豚協會、金門縣政府建設處漁牧科等單位派員到場處理,經比對發現這隻海豚品種為露脊鼠海豚。海豚在就地掩埋前,縣府人員已採集檢體,藉以判斷死亡原因。

【其他文章推薦】

※廢氣洗滌塔,叫得動, 找得到的專業廠商‎

※選擇示波器的10 項考量因素

無塵擦拭布各大品牌廠商販售比價網!

飲水機品牌迷思?有牌代表最好?錯! 了解用途才能買對!

※什麼規格的隔熱紙能有效提升冷房效果?

※快速搞懂塑膠射出成型原理

貨梯使用安全與保養

平腹小蜂防治椿象見效 集集再放4萬隻

摘錄自2020年3月14日自由時報報導

南投縣集集鎮龍眼、荔枝果園,去年深受荔枝椿象干擾,導致產量銳減,為此鎮公所與農會合作,協助農友施放平腹小蜂防治,透過小蜂產卵在椿象的卵裡,進而殺死椿象後代,減少椿象族群數,1年後公所與農友審視成果,荔枝園已找不太到椿象,足見防治已見成效,今年將持續施放近4萬隻小蜂,配合農友農藥防治,盼減少荔枝椿象危害。

荔枝農表示,去年果園裡處處可見荔枝椿象蹤影,但施放平腹小蜂後,加上適當的噴藥,1年過後巡視荔枝園,已找不太到椿象了,估計生物防治效果可達6成,盼平腹小蜂能持續施放,讓今年荔枝產量能回升。

集集鎮長陳紀衡表示,今年椿象數量受到明顯控制,在施放小蜂的生物防治,以及農友噴藥做化學防治,可見族群數量減少,公所今年將會針對果園與公共區域做防治,減少椿象危害。

【其他文章推薦】

AVX代理商NICHICON代理商授權有哪幾家?

※大樓隔熱紙施工分享說明,教你如何善用空間裝潢設計 !

※買不起高檔茶葉,精緻包裝茶葉罐,也能撐場面!

塑膠射出成型模具過程大公開 !

※廢氣洗滌塔設計及注意事項 ?

實驗型均質機乳化分離效果好嗎?

好品牌靠實力,這款1.2T發動機將帶來動力新革命

2T發動機,其實也就屬於廠商宣傳的噱頭,與其他品牌趨於一致,但經過研究一番后,裏面涵蓋的技術,確實可以說是每一項都針對着用戶日後用車養車所有遇到的困難之處,例如人們會覺得渦輪車所需要的保養費要貴與自然吸氣,以及不比自然吸氣發動車耐用,但以下這幾點,你看完后,就會發覺被豐田所否定了。

大家在買車的時候,都有對着一些品牌和國家帶有某方面的定義,例如意大利跑車出名於設計,德國奔馳寶馬奧迪出名於技術,而談到代步車耐用省油好開的程度上,則應該歸屬於日本的造車技術了,提到日系車,一定得提到的就是世界上最賺錢的汽車公司——豐田。

根據《2016年福布斯全球企業2000強》榜單,豐田蟬聯世界汽車企業第一強,2015年豐田的營業收入達到2358億美元,利潤達193億美元,是當時大眾71億美元利潤的兩倍多,而在造車品質方面,豐田汽車的品質向來是汽車業界的標杆,在2015年已實施檢查的豐田全球生產線中,能獲得“零缺陷率”評價的僅有7條,而廣汽豐田則是唯一一家全部生產線獲得“零缺陷率”評價的豐田事業體。

品質保證靠的不是檢查,而是每道工序打造出來的

許多企業在追求品質保證的時候,都會重點發展檢查組這樣的管理體系,這是一種偏向於結果的管理,而廣汽豐田則早已在涉入源頭與過程中的管理,“自工序完結”這是一個用日語翻譯過來的專業詞彙,按照其內部人員解釋的意思就是“品質是在每一道工序中打造出來的,而不是靠檢查出來的”,大家都知道日系是個節約成本的國家,且工作上往往會研究出更加重效率少資源利用的高效方法,無疑,這種從源頭開始管理的方法,精髓就在於“作業遵守率”,如果員工能夠苛刻地遵守,那麼生產出來的自然是合格品。

而在生產線上,廣汽豐田也一直堅持“自働化”,人與機器的完美配合,在每個工位上方都有這兩根不同顏色的繩子,一旦在裝配過程中遇到問題,造車技師能夠拉動這條“安東拉繩”,讓值班長協助解決,如果無法解決則停掉整條生產線,待問題解決后再繼續生產。

雖說有“自工序完結”,但造完車就可以出廠?

自工序完結只是一個近乎完美的工序,但為了達到接近百分之一百的合格率,還需要出廠前的檢查,由此,廣汽豐田成立了品質保證部自主監查組,每天會在生產線上各自抽取4台合格的新車,交給戴着黑帽子的監查員,進行最後一道全方位的檢查,他們是豐田汽車高級車輛監查員,具有在雞蛋里挑骨頭的精神,反覆的檢查才能保證廣汽豐田造車的高水平。

造車精神如此嚴謹,開發新技術也是同理

對於我們國人,雖然說現在自主品牌發展迅速,但對於南方城市來說,仍然還是有許多人在買代步車的時候,會首先考慮日系,看重的就是其耐用,省油,故障率低。而其中,豐田是人們一定會考慮的品牌,如今小排量渦輪增壓逐漸以一種新動力方向,取代傳統的1.6L和1.8L自然吸氣排量發動機,現有着大眾的1.2T,福特的1.0T,吉利的1.3T等等,近兩個月來,豐田也出台了其全新1.2T渦輪增壓發動機,與其說它是后發先至欲成為行業的標杆,更不如說這個舉動,其實是豐田沉思許久,熟悉市場,在確保低故障率后才推出來的新生產物。

那麼這台TURBO版的1.2T發動機,有什麼厲害之處?

曾認為這款1.2T發動機,其實也就屬於廠商宣傳的噱頭,與其他品牌趨於一致,但經過研究一番后,裏面涵蓋的技術,確實可以說是每一項都針對着用戶日後用車養車所有遇到的困難之處,例如人們會覺得渦輪車所需要的保養費要貴與自然吸氣,以及不比自然吸氣發動車耐用,但以下這幾點,你看完后,就會發覺被豐田所否定了。

水冷式中央冷卻器: 從發動機研發調校的角度出發,能夠影響到渦輪增壓發動機扭矩數據的參數就是進氣溫度,如果進氣溫度不能很有效地在進入燃燒室之前被冷卻,則會影響到發動機的熱效率,影響功率,與其他採用風冷中央冷卻器的發動機不同,豐田這款1.2T發動機採用水冷裝置,能夠更好地冷卻進氣溫度,同樣這種技術在寶馬和雷克薩斯IS系列上很常見。

燃油頂置直噴:與普通的歧管噴射發動機相比,採用缸內直噴的方式更加直接,既能夠有效地降低燃燒室的溫度,還能有效地抑制爆震,在噴射上更加精準,從而達到節油的目的。

如此精細造車的廣汽豐田,為大家帶來什麼福利?

這款1.2T發動機已搭載於廣汽豐田的熱銷車型雷凌,新款雷凌將取消舊排量的1.6L自然吸氣版本,轉而是1.2T的TURBO版本和1.8L的自然吸氣版本,在外觀上與舊款並沒有太大的區別,在TURBO版本的尾部明顯多了一個標識“D-4T”,這正是上面所提到發動機技術的縮寫。

內飾上,新款的雷凌TURBO版本在車門扶手車加入了細細的紅色飾條,新款運動風格座椅也採用紅色縫線,同時在靠背的地方還綉有“LEVIN”標識語,包裹性更好,配置上更是全新地升級了一番,新款雷凌TURBO和1.8L版本,全系標配智能節油啟停系統,VSC車身穩定控制系統和TRC牽引力控制系統,上坡輔助系統,將每一個安全配置落實到位。

在試駕體驗上,搭載了這款這麼“神”的1.2T發動機的雷凌TURBO,最大功率85KW,峰值扭矩達到了185牛米,強勁的初中段加速,動力能夠持續提升,在1500轉時就能夠達到最大扭矩,搭配8速的S-CVT無級變速器,帶有獨特的柔性鎖止控制技術,動力傳輸更加直接,操控性也大大提升。這款低排量渦輪增壓發動機與無級變速器匹配得不錯,能夠很好地控制油耗,百公里綜合油耗低至5.4L,不易積碳不易燒機油。

總結

還是那句話,談意大利汽車需要提到他們的設計,談到德系車需要提到他們的技術,而說到日系說到豐田,則必須談談他們製造的工藝,嚴謹的自工序完結,交車前的細心檢查,這都是一個企業的素質體現,而搭載新技術的廣汽豐田雷凌TURBO版本,在保養方面也不必擔心需要使用更高的機油品質,只需要使用與正常1.6L自然吸氣發動機一樣的機油即可,養車費用不會變高,所以希望新款雷凌TURBO能夠在低排量代步車級別中帶出不一樣的銷量成績,大家請拭目以待。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

※別再煩惱如何寫文案,掌握八大原則!

解Bug之路-記一次JVM堆外內存泄露Bug的查找

解Bug之路-記一次JVM堆外內存泄露Bug的查找

前言

JVM的堆外內存泄露的定位一直是個比較棘手的問題。此次的Bug查找從堆內內存的泄露反推出堆外內存,同時對物理內存的使用做了定量的分析,從而實錘了Bug的源頭。筆者將此Bug分析的過程寫成博客,以饗讀者。
由於物理內存定量分析部分用到了linux kernel虛擬內存管理的知識,讀者如果有興趣了解請看ulk3(《深入理解linux內核第三版》)

內存泄露Bug現場

一個線上穩定運行了三年的系統,從物理機遷移到docker環境后,運行了一段時間,突然被監控系統發出了某些實例不可用的報警。所幸有負載均衡,可以自動下掉節點,如下圖所示:

登錄到對應機器上后,發現由於內存佔用太大,觸發OOM,然後被linux系統本身給kill了。

應急措施

緊急在出問題的實例上再次啟動應用,啟動后,內存佔用正常,一切Okay。

奇怪現象

當前設置的最大堆內存是1792M,如下所示:

-Xmx1792m -Xms1792m -Xmn900m -XX:PermSi
ze=256m -XX:MaxPermSize=256m -server -Xss512k 

查看操作系統層面的監控,發現內存佔用情況如下圖所示:

上圖藍色的線表示總的內存使用量,發現一直漲到了4G后,超出了系統限制。
很明顯,有堆外內存泄露了。

查找線索

gc日誌

一般出現內存泄露,筆者立馬想到的就是查看當時的gc日誌。
本身應用所採用框架會定時打印出對應的gc日誌,遂查看,發現gc日誌一切正常。對應日誌如下:

查看了當天的所有gc日誌,發現內存始終會回落到170M左右,並無明顯的增加。要知道JVM進程本身佔用的內存可是接近4G(加上其它進程,例如日誌進程就已經到4G了),進一步確認是堆外內存導致。

排查代碼

打開線上服務對應對應代碼,查了一圈,發現沒有任何地方顯式利用堆外內存,其沒有依賴任何額外的native方法。關於網絡IO的代碼也是託管給Tomcat,很明顯,作為一個全世界廣泛流行的Web服務器,Tomcat不大可能有堆外內存泄露。

進一步查找

由於在代碼層面沒有發現堆外內存的痕迹,那就繼續找些其它的信息,希望能發現蛛絲馬跡。

Dump出JVM的Heap堆

由於線上出問題的Server已經被kill,還好有其它幾台,登上去發現它們也 佔用了很大的堆外內存,只是還沒有到觸發OOM的臨界點而已。於是就趕緊用jmap dump了兩台機器中應用JVM的堆情況,這兩台留做現場保留不動,然後將其它機器迅速重啟,以防同時被OOM導致服務不可用。
使用如下命令dump:

jmap -dump:format=b,file=heap.bin [pid]

使用MAT分析Heap文件

挑了一個heap文件進行分析,堆的使用情況如下圖所示:

一共用了200多M,和之前gc文件打印出來的170M相差不大,遠遠沒有到4G的程度。
不得不說MAT是個非常好用的工具,它可以提示你可能內存泄露的點:

這個cachedBnsClient類有12452個實例,佔用了整個堆的61.92%。
查看了另一個heap文件,發現也是同樣的情況。這個地方肯定有內存泄露,但是也佔用了130多M,和4G相差甚遠。

查看對應的代碼

系統中大部分對於CachedBnsClient的調用,都是通過註解Autowired的,這部分實例數很少。
唯一頻繁產生此類實例的代碼如下所示:

@Override
    public void fun() {
            BnsClient bnsClient = new CachedBnsClient();
          // do something
    		return  ;
	}

此CachedBnsClient僅僅在方法體內使用,並沒有逃逸到外面,再看此類本身

public class CachedBnsClient   {
    private ConcurrentHashMap<String, List<String>> authCache = new ConcurrentHashMap<String, List<String>>();
    private ConcurrentHashMap<String, List<URI>> validUriCache = new ConcurrentHashMap<String, List<URI>>();
    private ConcurrentHashMap<String, List<URI>> uriCache = new ConcurrentHashMap<String, List<URI>>();
	......
}

沒有任何static變量,同時也沒有往任何全局變量註冊自身。換言之,在類的成員(Member)中,是不可能出現內存泄露的。
當時只粗略的過了一過成員變量,回過頭來細想,還是漏了不少地方的。

更多信息

由於代碼排查下來,感覺這塊不應該出現內存泄露(但是事實確是如此的打臉)。這個類也沒有顯式用到堆外內存,而且只佔了130M,和4G比起來微不足道,還是先去追查主要矛盾再說。

使用jstack dump線程信息

現場信息越多,越能找出蛛絲馬跡。先用jstack把線程信息dump下來看下。
這一看,立馬發現了不同,除了正常的IO線程以及框架本身的一些守護線程外,竟然還多出來了12563多個線程。

"Thread-5" daemon prio=10 tid=0x00007fb79426e000 nid=0x7346 waiting on condition [0x00007fb7b5678000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
	at java.lang.Thread.sleep(Native Method)
	at com.xxxxx.CachedBnsClient$1.run(CachedBnsClient.java:62)

而且這些正好是運行再CachedBnsClient的run方法上面!這些特定線程的數量正好是12452個,和cachedBnsClient數量一致!

再次check對應代碼

原來剛才看CachedBnsClient代碼的時候遺漏掉了一個關鍵的點!

    public CachedBnsClient(BnsClient client) {
        super();
        this.backendClient = client;
        new Thread() {
            @Override
            public void run() {
                for (; ; ) {
                    refreshCache();
                    try {
                        Thread.sleep(60 * 1000);
                    } catch (InterruptedException e) {
                        logger.error("出錯", e);
                    }
                }
            }
            ......
        }.start();
    }

這段代碼是CachedBnsClient的構造函數,其在裏面創建了一個無限循環的線程,每隔60s啟動一次刷新一下裏面的緩存!

找到關鍵點

在看到12452個等待在CachedBnsClient.run的業務的一瞬間筆者就意識到,肯定是這邊的線程導致對外內存泄露了。下面就是根據線程大小計算其泄露內存量是不是確實能夠引起OOM了。

發現內存計算對不上

由於我們這邊設置的Xss是512K,即一個線程棧大小是512K,而由於線程共享其它MM單元(線程本地內存是是現在線程棧上的),所以實際線程堆外內存佔用數量也是512K。進行如下計算:

12563 * 512K = 6331M = 6.3G

整個環境一共4G,加上JVM堆內存1.8G(1792M),已經明顯的超過了4G。

(6.3G + 1.8G)=8.1G > 4G

如果按照此計算,應用應用早就被OOM了。

怎麼回事呢?

為了解決這個問題,筆者又思考了好久。如下所示:

Java線程底層實現

JVM的線程在linux上底層是調用NPTL(Native Posix Thread Library)來創建的,一個JVM線程就對應linux的lwp(輕量級進程,也是進程,只不過共享了mm_struct,用來實現線程),一個thread.start就相當於do_fork了一把。
其中,我們在JVM啟動時候設置了-Xss=512K(即線程棧大小),這512K中然後有8K是必須使用的,這8K是由進程的內核棧和thread_info公用的,放在兩塊連續的物理頁框上。如下圖所示:

眾所周知,一個進程(包括lwp)包括內核棧和用戶棧,內核棧+thread_info用了8K,那麼用戶態的棧可用內存就是:

512K-8K=504K

如下圖所示:

Linux實際物理內存映射

事實上linux對物理內存的使用非常的摳門,一開始只是分配了虛擬內存的線性區,並沒有分配實際的物理內存,只有推到最後使用的時候才分配具體的物理內存,即所謂的請求調頁。如下圖所示:

查看smaps進程內存使用信息

使用如下命令,查看

cat /proc/[pid]/smaps > smaps.txt

實際物理內存使用信息,如下所示:

7fa69a6d1000-7fa69a74f000 rwxp 00000000 00:00 0 
Size:                504 kB
Rss:                  92 kB
Pss:                  92 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:        92 kB
Referenced:           92 kB
Anonymous:            92 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB

7fa69a7d3000-7fa69a851000 rwxp 00000000 00:00 0 
Size:                504 kB
Rss:                 152 kB
Pss:                 152 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:       152 kB
Referenced:          152 kB
Anonymous:           152 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB

搜索下504KB,正好是12563個,對了12563個線程,其中Rss表示實際物理內存(含共享庫)92KB,Pss表示實際物理內存(按比例共享庫)92KB(由於沒有共享庫,所以Rss==Pss),以第一個7fa69a6d1000-7fa69a74f000線性區來看,其映射了92KB的空間,第二個映射了152KB的空間。如下圖所示:

挑出符合條件(即size是504K)的幾十組看了下,基本都在92K-152K之間,再加上內核棧8K

(92+152)/2+8K=130K,由於是估算,取整為128K,即反映此應用平均線程棧大小。

注意,實際內存有波動的原因是由於環境不同,從而走了不同的分支,導致棧上的增長不同。

重新進行內存計算

JVM一開始申請了

-Xmx1792m -Xms1792m

即1.8G的堆內內存,這裡是即時分配,一開始就用物理頁框填充。
12563個線程,每個線程棧平均大小128K,即:

128K * 12563=1570M=1.5G的對外內存

取個整數128K,就能反映出平均水平。再拿這個128K * 12563 =1570M = 1.5G,加上JVM的1.8G,就已經達到了3.3G,再加上kernel和日誌傳輸進程等使用的內存數量,確實已經接近了4G,這樣內存就對應上了!(注:用於定量內存計算的環境是一台內存用量將近4G,但還沒OOM的機器)

為什麼在物理機上沒有應用Down機

筆者登錄了原來物理機,應用還在跑,發現其同樣有堆外內存泄露的現象,其物理內存使用已經達到了5個多G!幸好物理機內存很大,而且此應用發布還比較頻繁,所以沒有被OOM。
Dump了物理機上應用的線程,

一共有28737個線程,其中28626個線程等待在CachedBnsClient上。 

同樣用smaps查看進程實際內存信息,其平均大小依舊為

128K,因為是同一應用的原因

繼續進行物理內存計算

1.8+(28737 * 128k)/1024K =(3.6+1.8)=5.4G

進一步驗證了我們的推理。

這麼多線程應用為什麼沒有卡頓

因為基本所有的線程都睡眠在

 Thread.sleep(60 * 1000);//一次睡眠60s

上。所以僅僅佔用了內存,實際佔用的CPU時間很少。

總結

查找Bug的時候,現場信息越多越好,同時定位Bug必須要有實質性的證據。例如內存泄露就要用你推測出的模型進行定量分析。在定量和實際對不上的時候,深挖下去,你會發現不一樣的風景!

公眾號

關注筆者公眾號,獲取更多乾貨文章:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

※回頭車貨運收費標準

Kubernetes日誌的6個最佳實踐

本文轉自Rancher Labs

Kubernetes可以幫助管理部署在Pod中的上百個容器的生命周期。它是高度分佈式的並且各個部分是動態的。一個已經實現的Kubernetes環境通常涉及帶有集群和節點的幾個系統,這些系統託管着幾百個容器,而這些容器不斷地基於工作負載啟動、毀滅。

當在Kubernetes中處理大量的容器化應用和工作負載時,主動進行監控和調試錯誤十分重要。在容器、節點或集群級別,這些錯誤都能在容器中看到。Kubernetes的日誌機制是一個十分重要的組件,可以用來管理和監控服務以及基礎設施。在Kubernetes中,日誌可以讓你跟蹤錯誤甚至可以調整託管應用程序的容器的性能。

配置stdout(標準輸出)和stderr(標準錯誤)數據流

圖片來源:kubernetes.io

第一步是理解日誌是如何生成的。通過Kubernetes,日誌會被發送到兩個數據流——stdout和stderr。這些數據流將寫入JSON文件,並且此過程由Kubernetes內部處理。你可以配置將哪個日誌發送到哪個數據流中。而一個最佳實踐的建議是將所有應用程序日誌都發送到stdout並且所有錯誤日誌都發送到stderr。

決定是否使用Sidecar模型

Kubernetes建議使用sidecar容器來收集日誌。在這一方法中,每個應用程序容器將有一個鄰近的“streaming容器”,該容器將會將所有日誌流傳輸到stdout和stderr。Sidecar模型可以幫助避免在節點級別公開日誌,並且它可以讓你控制容器級別的日誌。

然而,這一模型的問題是它能夠適用於小容量的日誌記錄,如果面對大規模的日誌記錄,可能會造成大量資源被佔用。因此,你需要為每個正在運行的應用程序容器單獨運行一個日誌容器。在Kubernetes文檔中,將sidecar模型形容為“幾乎沒有很大的開銷”。需要由你決定是否嘗試這一模型並在選擇它之前查看它所消耗的資源類型。

替代方法是使用日誌代理,該代理在節點級別收集日誌。這樣可以減少開銷,並確保安全地處理日誌。Fluentd已成為大規模聚合Kubernetes日誌的最佳選擇。它充當Kubernetes與你要使用Kubernetes日誌的任意數量的端點之間的橋樑。你也可以選擇像Rancher這樣的Kubernetes管理平台,在應用商店已經集成了Fluentd,無需從頭開始安裝配置。

確定Fluentd可以更好地匯總和路由日誌數據后,下一步就是確定如何存儲和分析日誌數據。

選擇日誌分析工具:EFK或專用日誌記錄

傳統上,對於以本地服務器為中心的系統,應用程序日誌存儲在系統中的日誌文件中。這些文件可以在定義的位置看到,也可以移動到中央服務器。但是對於Kubernetes,所有日誌都發送到磁盤上/var/log的JSON文件中。這種類型的日誌聚合併不安全,因為節點中的Pod可以是臨時的也可以是短暫的。刪除Pod時,日誌文件將丟失。如果你需要嘗試對部分日誌數據丟失進行故障排除時,這可能很難。

Kubernetes官方推薦使用兩個選項:將所有日誌發送到Elasticsearch,或使用你選擇的第三方日誌記錄工具。同樣,這裏存在一個潛在的選擇。採用Elasticsearch路線意味着你需要購買一個完整的堆棧,即EFK堆棧,包括Elasticsearch、Fluentd和Kibana。每個工具都有其自己的作用。如上所述,Fluentd可以聚合和路由日誌。Elasticsearch是分析原始日誌數據並提供可讀輸出的強大平台。Kibana是一種開源數據可視化工具,可以從你的日誌數據創建漂亮的定製dashboard。這是一個完全開源的堆棧,是使用Kubernetes進行日誌記錄的強大解決方案。

儘管如此,有些事情仍然需要牢記。Elasticsearch除了由名為Elastic的組織構建和維護,還有龐大的開源社區開發人員為其做貢獻。儘管經過大量的實踐檢驗,它可以快速、強大地處理大規模數據查詢,但在大規模操作時可能會出現一些問題。如果採用的是自我管理(Self-managed)的Elasticsearch,那麼需要有人了解如何構建大規模平台。

替代方案是使用基於雲的日誌分析工具來存儲和分析Kubernetes日誌。諸如Sumo Logic和Splunk等工具都是很好的例子。其中一些工具利用Fluentd來將日誌路由到他們平台,而另一些可能有它們自己的自定義日誌代理,該代理位於Kubernetes中的節點級別。這些工具的設置十分簡單,並且使用這些工具可以花費最少的時間從零搭建一個可以查看日誌的dashboard。

使用RBAC控制對日誌的訪問

在Kubernetes中身份驗證機制使用的是基於角色訪問控制(RBAC)以驗證一個用戶的訪問和系統權限。根據用戶是否具有特權(authorization.k8s.io/decision )並向用戶授予原因(authorization.k8s.io/reason ),對在操作期間生成的審核日誌進行註釋。默認情況下,審核日誌未激活。建議激活它以跟蹤身份驗證問題,並可以使用kubectl進行設置。

保持日誌格式一致

Kubernetes日誌由Kubernetes架構中不同的部分生成。這些聚合的日誌應該格式一致,以便諸如Fluentd或FluentBit的日誌聚合工具更易於處理它們。例如,當配置stdout和stderr或使用Fluentd分配標籤和元數據時,需要牢記這一點。這種結構化日誌提供給Elasticsearch之後,可以減少日誌分析期間的延遲。

在日誌收集守護進程上設置資源限制

由於生成了大量日誌,因此很難在集群級別上管理日誌。DaemonSet在Kubernetes中的使用方式與Linux類似。它在後台運行以執行特定任務。Fluentd和filebeat是Kubernetes支持的用於日誌收集的兩個守護程序。我們必須為每個守護程序設置資源限制,以便根據可用的系統資源來優化日誌文件的收集。

結 論

Kubernetes包含多個層和組件,因此對其進行良好地監控和跟蹤能夠讓我們在面對故障時從容不迫。Kubernetes鼓勵使用無縫集成的外部“Kubernetes原生”工具進行日誌記錄,從而使管理員更輕鬆地獲取日誌。文章中提到的實踐對於擁有一個健壯的日誌記錄體繫結構很重要,該體繫結構在任何情況下都可以正常工作。它們以優化的方式消耗計算資源,並保持Kubernetes環境的安全性和高性能。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準