Flink程序富函数中使用定时任务查询mysql

news/2024/10/22 8:12:41/

Flink程序富函数中使用定时任务查询mysql出现内存堆积

问题描述

flink程序在跑的过程中, 发现跑几天就停掉了, 看日志发现是代码中的ResultSet和Statement堆积的太多,引起的内存溢出,但是代码中确实已经关闭了ResultSet和Statement,但是还是一直出现OOM的问题

具体案例

在open方法中的案例

  override def open(parameters: Configuration): Unit = {parameterTool = getRuntimeContext.getExecutionConfig.getGlobalJobParameters.asInstanceOf[ParameterTool]queryMysql()TimerUtil.schedule(30000, 30000, queryMysql())}

说明

  定时任务中链接问题:1.connection链接 ,这个放在close方法里面进行关闭即可;2.ResultSet链接  , 即用即关;3.Statement链接  ,即用即关;

例如1:

def getMysqlEvent(): Map[Int, mutable.Set[String]] = {val sql = "SELECT * FROM test WHERE status = false"var statement: Statement = nullvar result: ResultSet = nulltry {statement = connection.createStatement()result = statement.executeQuery(sql)val map: mutable.Map[Int, mutable.Set[String]] = mutable.Map()while (result.next()) {val projectId = result.getInt(1)}eventMap.toMap} catch {case e: Exception =>e.printStackTrace()throw new Exception("error", e)} finally {DbUtils.close(result)DbUtils.close(statement)}}

例如2

(重点关注代码中的while循环那块,会产生内存堆积就在这块):

  def getStudents(): util.HashMap[Int, util.List[Student]] = {val sql = s"""select id from test01""".stripMarginvar eventState: Statement = nullvar eventResult: ResultSet = nullval map = new util.HashMap[Int, util.List[Student]]()val a11 = new util.ArrayList[Student]()val bbb = new util.ArrayList[Mater]try {eventState = connection.createStatement()eventResult = eventState.executeQuery(sql)while (eventResult.next()) {var attrStatement: Statement = nullvar resultSet: ResultSet = nulltry {val id = eventResult.getInt(1)val projectId = eventResult.getInt(2)val attrSql =s"""select * from aaa """.stripMarginattrStatement = connection.createStatement()resultSet = attrStatement.executeQuery(attrSql)while (resultSet.next()) {val id = resultSet.getInt(1)}} catch {case e: Exception => throw new Exception("Error ", e)}finally {DbUtils.close(resultSet)DbUtils.close(attrStatement)}}ttt}catch {case e: Exception => throw new Exception("Error ", e)}finally {DbUtils.close(eventResult)DbUtils.close(eventState)}}

解释:

在例1中 ,整个方法中只有一次sql查询,所以直接在代码最后面关闭即可在例2中,整个方法中有两次sql查询,第二次sql查询会把第一次sql查询的结果进行循环遍历,然后再进行查询,,注意 while循环 , 这块会产生多个Statement和ResultSet对象,所以需要再代码中每一次查询结束后就会进行一次数据的查询

http://www.ppmy.cn/news/1000618.html

相关文章

使用变量作为参数的CSS rgba()函数详解

系列文章目录 文章目录 系列文章目录前言一、rgba()函数简介二、使用变量设置透明度三、动态调整透明度总结前言 CSS的rgba()函数用于设置颜色值的透明度。在实际开发中,我们可能希望通过变量来动态设置颜色透明度,以实现更灵活的样式效果。本文将详细介绍如何在rgba()函数中…

Linux 9的repo for OVS build

源码中自带RPM包spec文件 cd /root/rpmbuild/SOURCES/openvswitch-2.17.7/rhel rpmbuild -bb openvswitch.spec ## 按提示解决,不好解决的依赖可以试试下面的repo 方法 error: File /root/rpmbuild/SOURCES/openvswitch-2.17.7.tar.gz: No such file or direct…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板4

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

软考A计划-系统集成项目管理工程师-项目合同管理-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

vscode如何包含第三方库

方法1:使用C Extension 在include 的 rapidjson的头文件时,vscode会提示找不到的问题 悬停,点击黄色提示 Edit "includePath" setting Include Path,输入rapidjson的include路径 /Users/xxx/workspaces/rapidjson-1.1.…

【考古】Java8 集合工具类Arrays

文章目录 一、概述二、常用方法三、简单使用3.1 Arrays的sort排序3.2 Arrays的binarySearch查找3.3 Arrays的fill填充3.4 Arrays的copyOf复制数组3.5 Arrays的copyOfRange复制部分Arrays的asList数组转链表 四、总结 一、概述 在 Java 的util包中提供了一个Arrays工具类用来操作…

贝锐蒲公英:没有公网IP,多分支企业如何高效远程访问OA系统?

贝锐蒲公英:没有公网IP,多分支企业、移动办公人员如何高效远程访问OA系统? 国内某大型美妆公司,旗下产品覆盖美容护肤品、彩妆、美容仪器、健康食品、SPA美容会所及等多类服务,致力于为客户提供高品质的产品和完善的服…

android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用

android 如何分析应用的内存(十五)——Visual Studio Code 调试Android 应用 在上一篇文章介绍了jdb调试java应用 接下来介绍用UI界面调试java应用,达到同jdb一样的效果。 同样的UI界面有很多选择,如Eclipse,Android …