背景:
去年接手了一个排序服务,用于播单、声音、主播排序。接手于来处理过内存溢出问题,后面也没再出现过其他状况。但是最近该项目用于离线任务计算后,出现了问题。并且问题发生时间是在计算量扩量之后。
项目背景:
- 该项目与算法的配合方式:项目提供接口规范,涉及:排序算法加载、自动更新、模型调用、输入参数解析、告知模型所需特征数据(包括特征表、表字段等)。
- 项目需要做的事:加载算法–>解析请求数据–>获取特征数据–>调用模型排序–>解析排序结果–>结果拼装返回。
二、问题背景
1、发现项目的k8s容器会出现重启现象。
发生问题时,容器配置:CPU:4个:排序计算需要; 内存:堆内6G:w2v模型本地加载; 对外3G:各种算法包计算使用。
三、问题结论:
Nd4j计算框架在做计算时(使用了OpenMP库:OpenMP是一个开源的并行编程API,支持C/C++/Fortran语言。ND4j使用以C++编写的后端,因此我们用OpenMP来改善CPU的并行计算性能。),库里面直接调用pthread_create进行线程创建,多线程并行计算。由于对该领域的包不是很了解,就不深挖该计算框架的优化。直接摒弃该库采用其他方式做计算。
四、问题排查流程
查看监控系统,观察重启发生时,容器实例的资源情况