优秀网站例子,专业优化网站建设,微商网站,学校网站建设的技术方案案例背景
某保险机构客户的数据中台#xff0c;自系统上线后不久#xff0c;会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但#xff0c;不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升#xff0c;最终导致系统夯住而不可用的异常。
memo…案例背景
某保险机构客户的数据中台自系统上线后不久会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升最终导致系统夯住而不可用的异常。
memory 利用率 cpu 利用率 数据不能更新已经影响下游业务处理问题比较严重我们紧急上线排查分析发现客户应用是通过java程序调用shell脚本再执行obloader命令可能会同时出现多个任务并发导数据的情况。在并发导数据场景下系统出现大量obloader 进程应用java 程序夯住不可用最终导致容器OOM重启客户是不可接受的。 问题排查
我们拿到客户的shell脚本和数据文件在线下进行验证尝试复现过程如下
验证一独立运行obloader工具现象独立运行obloader工具没有发生夯住的现象可以确认工具内部是可以正常工作的。
研发人员需要结合业务系统产生的数据格式决定如何使用obloader工具在命令行参数中加上--trail-delimiter 导入业务数据导入可以发现文件中存在大量脏数据。 验证二使用shell脚本运行obloader工具现象摄影shell脚本运行obloader工具没有发生夯住的现象但是导入速度比直接运行obloader 工具慢10多秒同样可以排除obloader工具内部没有夯住的问题。 验证三提交多份文件使用java程序运行obloader 工具现象导入速度比直接运行obloader 工具慢1分钟同时发现业务产生的数据文件中格式严重 不一致有的行有29列有的行有32列数据无法正常导入工具打印大量的错误日志java 程序夯住。
解决方案
上述验证结论可以推测控制台大量错误日志输出导致java调用程序夯住而通过shell窗口运行脚本或者工具并未出现夯住的现象。为了进一步验证推测我们再进行下一步的验证将运行脚本中的命令产生的stderr/stdout重定向到指定文件中避免向控制台输出。测试验证推理至此问题原因定位修复方案如下
1、上游业务检查推送的数据文件格式避免出现格式不正确的脏数据问题。
2、java程序去到log4j2.xml配置中的AppenderRef refConsoleAppender /避免控制台打印大量错误日志。
3、并发限制避免同时大量调用obloader导数据避免cpu、memory 资源不足。 log4j2.xml配置文件修改
修改前
Logger namecom.oceanbase.tools.loaddump additivityfalse levelINFO
AppenderRef refConsoleAppender /
AppenderRef refInfoRoutingAppender /
AppenderRef refWarnRoutingAppender /
AppenderRef refErrorRoutingAppender /
/Logger去掉了 AppenderRef refConsoleAppender /
修改后
Logger namecom.oceanbase.tools.loaddump additivityfalse levelINFO
AppenderRef refInfoRoutingAppender /
AppenderRef refWarnRoutingAppender /
AppenderRef refErrorRoutingAppender /
/Logger