天天看點

k8s記憶體限制和jvm的記憶體限制配置不對引起pod重新開機

k8s裡面跑jenkins pod,在建構前端nodejs的過程中不段的重新開機,重新開機後pod的日志都是jenkins的啟動日志,看不到報錯資訊,describe deploy沒有看到報錯資訊,get event也沒看到報錯資訊,docker logs容器也是jenkins的啟動資訊,後面在node的/var/logs/message看到了oom資訊:

顯然是記憶體配置的原因,剛開始沒有注意,将jenkins的jvm記憶體參數和deploy的limits和requests寫成一樣了:

...

name: JAVA_OPTS

value: -Xms8g -Xmx8g -XX:MaxDirectMemorySize=8g -DsessionTimeout=60

resources:

limits:

cpu: "4"

memory: 8000Mi

requests:

剛開始我登陸jenkins pod,檢視top(其實這個top和node的top是一樣的),在編譯到某個階段的時候cpu核心10核都在跑,我以為是limits和requests的cpu配置有問題,不斷的從8改成6再改成4,結果都一樣,編譯的時候就自動重新開機。後來也調了jvm的記憶體參數和limits和requests的記憶體參數(這時候還沒有調對),都沒有效果,無奈去QQ群裡提問

經過大佬的提示jvm配置要改成limits和requests的80%,于是我改成這樣

memory: 10120Mi

改成這樣以後,再把cpu改成1或者4或者其他都不挂

1.在檢視node的message資訊的時候出現oom的時候應該就斷定是記憶體配置的問題,并不需要去調整cpu參數,這樣浪費了很多時間

2.對jvm的記憶體限制和resources的記憶體限制配置不熟悉,因為此前也沒有碰到過,說明經驗缺乏

繼續閱讀