2021-08-23 关于Java调用虹软2.0人脸搜索引擎所欲问题总结

前言:由于公司后期决定所有云平台采用容器部署,所有java服务都部署到容器中,用k8s进行应用部署,规划,更新,维护的一种机制。

问题:在变更部署环境后一段时间内,由于公司人事变动问题,没有对变更环境的项目进行测试。近期用户反馈,人脸录不进系统。

解决过程:1.查看系统内的日志,发现一个疑点,每次调用完人脸接口后,java程序就GC,容器直接重启。开始怀疑是虹软人脸识别需要消耗大量内存,超过容器限制的内存,而导致的由于内存溢出(OOM),容器已被杀掉;后续分配了自定义内存后还是会重启。

2.在网上一波百度后发现可能是jdk版本的问题,突然想起之前换环境是,做镜像的同事说原先的jdk打包出来的镜像太大了,换了个jdk。一下子思路就打开了,我马上修改了dockerfile里面构建依赖的基础镜像,回归到原先的jdk。运行后果然不再重启了,但是报了另外一个错误

(PS:java.lang.UnsatisfiedLinkError: /usr/lib64/libarcsoft_face_engine_jni.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /usr/lib64/libarcsoft_face_engine.so))

3.因为虹软人脸识别的so文件有三个,都是通过dockerfile里面指令复制进去的,百度出来是libstdc++.so.6.0.14版本太低,后续下载了libstdc++.so.6.0.21然后重新创建软链接,在Dockerfile中的指令。之后就解决了这个问题。

(PS:

RUN rm-rf/usr/lib64/libstdc++.so.6

RUN ln-s/usr/lib64/libstdc++.so.6.0.26 /usr/lib64/libstdc++.so.6


总结:过程说出来就那么点,但是在解决过程中走了很多弯路,犹豫JDK的更改还带来了其他很多问题,比如原先的导出下载也出现了bug,换了JDK后docker中的centos的版本跟原先的不同也导致了后续这个版本太低的问题。所以对Java程序来说,在单体应用架构中会集成很多第三方组件,就会遇到当环境变更而带来的一系列问题。

你可能感兴趣的:(2021-08-23 关于Java调用虹软2.0人脸搜索引擎所欲问题总结)