歡迎訪問我的GitHub
這里分類和匯總了欣宸的全部原創(含配套原始碼):https://github.com/zq2599/blog_demos
K8S環境的Jenkin性能問題處理
本文是《K8S環境的Jenkin性能問題處理》的續篇,上一篇解決了Jenkins集群中的Master節點的性能問題,但是真正執行任務的并非Master節點,而是為每個任務臨時創建的Pod,當這些Pod的性能問題決定著任務的快慢甚至成敗;
環境資訊
- 硬體:三臺CentOS 7.7服務器
- kubernetes:1.15
- JDK:1.8
- maven:3.6.3
任務節點的性能問題
Java程式員常用Jenkins編譯構建Maven專案,如果構建引數用的是默認配置,很容易出現性能問題,接下來就用開源專案來重現此問題:
- 在配置Jenkins的kubernetes插件時,按照實際硬體情況給任務pod分配的記憶體是1G,如下圖:

- 接下來從GitHub下載Flink的原始碼(1.8.3-rc3版本),然后編譯構建,本次任務對應的pipeline原始碼如下:
pipeline {
agent {
label 'my-jenkins-jenkins-slave'
}
tools {
maven 'mvn-3.6.3'
}
stages {
stage('Checkout') {
steps {
echo '從GitHub下載flink工程的原始碼(1.8.3-rc3歸檔包)'
sh 'wget https://codeload.github.com/apache/flink/tar.gz/release-1.8.3-rc3'
echo '下載結束,解壓歸檔包'
sh 'tar -zxf release-1.8.3-rc3'
}
}
stage('Build') {
steps {
echo '開始編譯構建'
sh 'cd flink-release-1.8.3-rc3 && mvn clean package -U -s /home/jenkins/settings/settings.xml'
}
}
}
}
- 在執行編譯構建任務程序中,點擊下圖紅框中的灰色圓球,即可跳轉到執行任務的Pod的日志頁面:

- 下圖就是Pod日志頁面,紅框內顯示任務出現了例外,(此時正在執行單元測驗用例)

- 如下圖紅框所示,執行任務的Pod顯示為離線狀態:

- 此時登錄到kubernetes環境,查看Pod狀態,如下圖紅框所示,執行任務的Pod狀態為OOMKilled,看來是記憶體不足導致Podl被銷毀了

第一次調節
由于Pod記憶體過小導致任務失敗,可以在Jenkins的設定頁面調節Pod記憶體,如下圖所示,這次設定到6G,注意不要超出宿主機的硬體配置:

- 重復執行一次上述任務,這一次記憶體充足因而構建成功,
觀察
由于本次任務主要是執行maven編譯構建,因此有必要了解一下maven行程的記憶體使用情況:
- 在任務執行的程序中,找到Pod對應的docker容器,ID是c6d9e1b64581
- 執行docker exec c6d9e1b64581 jps得到maven行程ID為96(名稱為Launcher的那個)
- 執行docker exec c6d9e1b64581 jmap -heap 96可以看到maven行程的JVM記憶體情況,如下圖,可見maven實際使用記憶體只有3G左右:

- 此時Pod有6G記憶體,可以通過引數設定給maven行程更多記憶體;
第二次調節
接下來嘗試設定maven行程的記憶體引數,這里將大部分記憶體劃分給老年代試試:
- 如下圖,進入設定頁面:

- 如下圖,找到Pod Templates,新增環境變數,鍵是MAVEN_OPTS,值是-Xms5632m -Xmx5632m -Xmn512m -Xss256k,由于Pod總記憶體是6G,經過此設定后,整個Pod的系統記憶體只剩512m,其余5632m記憶體全部劃分給maven行程,并且maven行程的年輕代只有512m,將所有記憶體都留給了老年代記憶體設定如下:

- 保存設定后再次執行任務,先找到任務Pod對應的docker容器,再用jmap -heap命令查看maven行程的記憶體情況,如下圖,5632m記憶體全部劃分給了maven行程,并且年輕代也控制在512m:

- 下圖是執行jstat命令查看maven行程的GC情況,紅框中是YGC次數,藍框中是FGC次數,由于年輕代記憶體過小導致頻繁YGC,不過FGC次數不多:

通過Jenkins設定頁面,對任務的Pod以及對應的maven行程的自定義設定已經完成,希望本文能給您一些參考,幫助您根據專案的特點做針對性的調節和優化,
歡迎關注公眾號:程式員欣宸
微信搜索「程式員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162992.html
標籤:其他
下一篇:公路修建問題
