真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題

這篇文章主要介紹“如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題”,在日常操作中,相信很多人在如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

公司主營業(yè)務(wù):網(wǎng)站制作、網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出民權(quán)免費做網(wǎng)站回饋大家。


 

背景

最近線上環(huán)境上出現(xiàn)了一個問題, k8s集群環(huán)境Pod中的tomcat容器運行一段時間后直接被killd,但有時一切看起來正常,不能準(zhǔn)確判斷在什么時機(jī)出現(xiàn)被Killd問題。

本文就此問題介紹了Linux內(nèi)存不足原因以及為什么特定進(jìn)程會被殺死。并提供了Kubernetes集群環(huán)境故障排除指南教程。

 

tomcat進(jìn)程被殺死原因分析

當(dāng)這個應(yīng)用程序被kill問題進(jìn)行故障排除時,很大程度上確定是操作系統(tǒng)殺死的, 因為整個過程確認(rèn)沒有進(jìn)行kill操作。當(dāng)我查看tomcat日志時發(fā)現(xiàn),tomcat只是簡單的提示了killd, 至于原因, 日志中沒有給出詳盡的提示。緊接著我查看了syslog日志grep -i kill /var/log/messages*, syslog給出比較詳細(xì)的提示, 大概意思是該應(yīng)用占用內(nèi)存超過cgroup限制, 直接被Kill。如下所示:

Oct 1 20:37:21 k8swork kernel: Memory cgroup out of memory: Kill process 13547 (java) score 1273 or sacrifice child
 

如果當(dāng)服務(wù)已經(jīng)掛掉, 使用free查看內(nèi)存占用, 對我們排除問題不會有太大幫助, 因為這個時候服務(wù)占用內(nèi)存已經(jīng)隨著服務(wù)的掛掉而釋放。如下所示:

[root@k8swork log]# free -lm
             total       used       free     shared    buffers     cached
Mem:           498         93        405          0         15         32
Low:           498         93        405
High:            0          0          0
-/+ buffers/cache:         44        453
Swap:         1023          0       1023
 

但是Linux vmstat可以使用以下命令將的輸出重定向到文件。我們甚至可以調(diào)整持續(xù)時間和次數(shù)以監(jiān)控更長的時間。當(dāng)命令運行時,我們可以隨時查看輸出文件以查看結(jié)果。我們每120秒查看內(nèi)存1000次。該&行末尾的允許我們將其作為一個進(jìn)程運行并重新獲得終端。

vmstat -SM 120 1000 > memoryuse.out &
 

通過如上信息可以判定罪魁禍?zhǔn)资沁@個Java進(jìn)程占用內(nèi)存超過資源限制, 直接被系統(tǒng)殺死。為什么會出現(xiàn)這個問題呢?

首先第一點,已經(jīng)在編排文件中限制資源最大使用量為4G,理論上Pod中容器是不可能占用這么多資源, 默認(rèn)情況下Java占用物理資源的1/4左右, 但是既然出現(xiàn)了這個問題,說明Java進(jìn)程占用資源超過了這個限制。

于是在網(wǎng)上找到了如下信息,大概意思是說,jdk從131版本之后開始通過選項支持對容器對內(nèi)存和CPU 的限制,如下圖所示:

如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題  
https://blogs.oracle.com/java-platform-group/java-se-support-for-docker-cpu-and-memory-limits

當(dāng)我打開131版本更新信息之后,沒有看到任何關(guān)于容器相關(guān)的更新, 于是開始查找之后的版本, 最后找到191版本, 可以看到Java對容器做出了支持。

如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題  
https://www.oracle.com/java/technologies/javase/8u191-relnotes.html

核對了目前出現(xiàn)問題的Java版本, 明顯是低于這個版本的, 確定了問題所在。

“  

Java虛擬機(jī)感知不到Pod中資源限制,所以直接占用了宿主機(jī)1/4左右內(nèi)存(宿主機(jī)是32G內(nèi)存), cgroup檢測到Pod占用內(nèi)存超過限制(Pod限制為4G),進(jìn)行了Kill操作。

”  

解決方式也很簡單,直接在tomcat服務(wù)中配置最大最小內(nèi)存占用, 在Java層面限制其內(nèi)存占用。但是具體Java進(jìn)程為什么占用這么高的內(nèi)存就需要業(yè)務(wù)開發(fā)人員排查解決了。

 

總結(jié)

通過本文可以看出基于Java虛擬機(jī)構(gòu)建項目, 在容器化過程中要盡量適配高版本或者對docker容器有親和性的Jdk版本, 如果沒有, 一定要在虛擬機(jī)層面限制Java服務(wù)占用內(nèi)存大小。另外一定要在服務(wù)上添加存活探針,如果沒有添加存活探針,類似于tomcat這種容器類服務(wù),即使內(nèi)部服務(wù)掛了了, Kubernetes不會自動幫你拉起的,原因很簡單,它無法感知到你的服務(wù)是否存活。所以服務(wù)一定要添加Http存活探針(基于TCP層面的探針只是檢測端口是否存活,大多數(shù)情況下,服務(wù)會出現(xiàn)假死問題,但端口依然可以正常訪問)。

 

問題故障排查指南教程推薦

首先這本書是阿里云同學(xué)總結(jié)的<<深入淺出Kubernetes>>, 里面不僅用通俗易懂語言介紹了Kubernetes核心概念, 而且介紹了Kubernetes集群出現(xiàn)問題解決思路,值得借鑒。比如其中一個案例半夜兩點Ca證書過期問題 它不僅詳細(xì)介紹了整個故障排除和解決方式, 另外給出了集群環(huán)境證書認(rèn)證體系流程介紹, 非常贊!

如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題  
Citadel 證書體系

如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題

到此,關(guān)于“如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
本文標(biāo)題:如何解決k8s集群環(huán)境內(nèi)存不足導(dǎo)致容器被kill問題
文章源于:http://weahome.cn/article/iihsih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部