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被销毁了:
[](
)第一次调节(K8S参数)
- 由于Pod内存过小导致任务失败,可以在Jenkins的设置页面调节Pod内存,如下图所示,这次设置到6G,注意不要超出宿主机的硬件配置:
- 重复执行一次上述任务,这一次内存充足因而构建成功;
[](
)观察
由于本次任务主要是执行maven编译构建,因此有必要了解一下maven进程的内存使用情况:
-
在任务执行的过程中,找到Pod对应的docker容器(kubectl describe pod xxx命令),ID是22484d8b1e56
-
执行docker exec 22484d8b1e56 jps得到maven进程ID为87(名称为Launcher的那个),如下图:
- 执行docker exec 22484d8b1e56 jmap -heap 87可以看到maven进程的JVM内存情况,如下图,可见maven实际使用内存只有3G左右:
- 此时Pod有6G内存,可以通过参数设置给maven进程更多内存;
[](
)第二次调节(JVM参数)
接下来尝试设置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次数不多:
最后
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Jav 需要zi料+ 绿色徽【vip1024b】
a面试宝典
3. Netty实战
4. 算法
BATJ面试要点及Java架构师进阶资料
- 算法
[外链图片转存中…(img-kt1zo1D2-1710360207340)]
BATJ面试要点及Java架构师进阶资料
[外链图片转存中…(img-K6W5NDXN-1710360207341)]