kettle后台进程卡住

在使用计划任务启动kettle任务的过程中,发现任务在后台卡住的情况。因为没有界面,所以一直占用内存,卡住的任务越多,就导致新的任务无法启动。

对于这种情况,发现计划任务中配置的,如果任务执行超过三天就结束任务并没有生效。所以需要再考虑其他的方式解决这个问题。

就考虑自己写一个脚本定时执行,获取java进程中执行时间最长的pid,超过某个时间,停掉这个任务。

修改kitchen进程名称

当我们启动一个任务的时候,执行的是一个java进程。但是因为我们还有tomcat等其他的java进程,所以不能直接停java,就考虑修改我们kettle任务执行的名称。

修改jdk中java进程名称

因为kettle需要特定版本jdk,所以jkd并不是使用环境变量中的,是我写死再spoon.bat/spoon.sh中的。所以我们可以直接修改配置好的jdk的bin路径中java.exe的名称,这里我改成了kettle_java.exe 。

修改kettle文件

进入kettle路径D:\Soft\kettle\data-integration

1.找到文件set-pentaho-env.bat

修改文件中的java.exe,改为kettle_java.exe

2. 找到文件spoon.bat

修改文件中所有的java.exe,改为kettle_java.exe

修改的这些配置不会影响界面的kettle,因为界面启动的进程是javaw.exe。脚本执行的kettle进程名称就改为kettle_java.exe了。

编写powershell脚本停止超时任务

原本想直接在之前的bat文件中编写,发现还是无法停止任务,所以还是使用powershell脚本解决这个问题。

获取执行时间最长的kettle_java.exe进程pid和starttime,如果执行时间超过120秒,就停止这个pid。脚本内容如下:

# 获取所有kettle_java.exe进程
$processes = Get-Process kettle_java

# 初始化最长运行时间和对应的进程
$max_runtime = 0
$longest_pid = $null

# 遍历所有进程
foreach ($process in $processes) {
    # 计算进程运行时间(秒)
    $runtime = ((Get-Date) - $process.StartTime).TotalSeconds

    # 如果运行时间超过当前最长运行时间,就更新最长运行时间和对应的进程
    if ($runtime -gt $max_runtime) {
        $max_runtime = $runtime
        $longest_pid = $process.Id
    }
}

# 如果最长运行时间超过120秒,就结束对应的进程
if ($max_runtime -gt 120) {
    Stop-Process -Id $longest_pid -Force
}

这样我们将脚本保存为.ps1后缀。再编写一个bat文件执行这个脚本,内容如下:

:: @echo off 后面是文件的绝对路径
powershell -ExecutionPolicy Bypass -File "C:\Users\Administrator\Desktop\KILL.ps1"

最后还是使用计划任务,执行这个bat脚本就可以了,定时执行,就可以防止任务卡死的情况占用内存了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇