自动抓取cpu消耗率高java 线程dump信息

2024-06-26 1688阅读

# 设置参数

自动抓取cpu消耗率高java 线程dump信息
(图片来源网络,侵删)

$DumpDir = "C:\gcDump\dump"

$CpuThreshold = 80

$LogFile = "C:\gcDump\log\monitor_log.txt"

# 循环监控 Java 进程

while ($true) {

    # 获取当前时间

    $CurrentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss.fff"

    Write-Output "当前时间: $CurrentTime"

    # 获取所有 Java 进程的 PID

    $Pids = Get-WmiObject Win32_Process -Filter "Name='java.exe'" | Select-Object -ExpandProperty ProcessId

    foreach ($JavaProcessId in $Pids) {

        # 获取进程的 CPU 使用率

        $Process = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | Where-Object { $_.IDProcess -eq $JavaProcessId }

        if ($Process) {

            $CpuUsage = $Process.PercentProcessorTime

            Write-Output "检测 PID $JavaProcessId... 当前 CPU 使用率: $CpuUsage%"

            Add-Content -Path $LogFile -Value "检测 PID $JavaProcessId... 当前 CPU 使用率: $CpuUsage%"

            # 如果 CPU 使用率超过阈值,则生成线程转储文件

            if ($CpuUsage -gt $CpuThreshold) {

                $Timestamp = Get-Date -Format "yyyyMMddHHmmss"

                

                # 获取 PID 使用资源最高的线程 ID

                $ThreadIdHex = & jstack -l $JavaProcessId | Select-String -Pattern 'nid=0x' | Select-Object -First 1 -ExpandProperty Line

                if ($ThreadIdHex) {

                    $ThreadIdHex = $ThreadIdHex.Trim() -replace '^.*nid=0x', ''

                    $ThreadIdHex = $ThreadIdHex.Split()[0]

                } else {

                    $ThreadIdHex = "unknown"

                }

                $DumpFile = "$DumpDir\threaddump_${JavaProcessId}_${Timestamp}_${ThreadIdHex}.txt"

                Write-Output "准备创建线程转储文件 $DumpFile..."

                & jstack -l $JavaProcessId > $DumpFile

                if ($LASTEXITCODE -ne 0) {

                    Write-Output "线程转储创建失败,错误码: $LASTEXITCODE"

                    Add-Content -Path $LogFile -Value "线程转储创建失败,错误码: $LASTEXITCODE"

                } else {

                    Write-Output "Thread dump created for PID $JavaProcessId at $DumpFile"

                    Add-Content -Path $LogFile -Value "Thread dump created for PID $JavaProcessId at $DumpFile"

                }

            }

        }

    }

    Start-Sleep -Seconds 2  # 每分钟检查一次

}

 

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]