• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

yxchun

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

jmeter通过脚本定时清理内存

 每隔5分钟清理一次

// 检查时间间隔
def lastGC = vars.getObject("lastGCTime") ?: 0L
def interval = 5 * 60 * 1000  // 5分钟

if (System.currentTimeMillis() - lastGC > interval) {
    // 内存统计
    def runtime = Runtime.getRuntime()
    def usedBefore = (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024
    
    // 执行GC
    System.gc()
    
    // 计算结果
    def usedAfter = (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024
    log.info("内存清理: 回收前=${usedBefore}MB, 回收后=${usedAfter}MB")
    
    // 更新执行时间
    vars.putObject("lastGCTime", System.currentTimeMillis())
} else {
    log.debug("未达到GC执行间隔,跳过...")
}

内存超过70%清理

 

import java.text.DecimalFormat

// 获取内存状态
def runtime = Runtime.getRuntime()
def maxMem = runtime.maxMemory() / (1024 * 1024)  // 最大内存(MB)
def usedBefore = (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024)  // 已用内存(MB)
def usagePercent = (usedBefore / maxMem) * 100  // 内存使用率(%)

// 格式化输出
def df = new DecimalFormat("#.##")
//log.info("执行")
// 内存使用率超过阈值时触发GC
if (usagePercent > 70) {
    log.warn("内存使用率过高 (${df.format(usagePercent)}%),触发GC...")
    
    def gcStartTime = System.currentTimeMillis()
    System.gc()  // 显式触发垃圾回收
    def gcDuration = System.currentTimeMillis() - gcStartTime
    
    // 回收后内存状态
    def usedAfter = (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024)
    def freedMem = usedBefore - usedAfter
    def newUsagePercent = (usedAfter / maxMem) * 100
    
    // 记录详细日志
    log.info("""
    |====== 内存清理报告 ======
    | 最大内存: ${maxMem}MB
    | 回收前: ${df.format(usedBefore)}MB (${df.format(usagePercent)}%)
    | 回收后: ${df.format(usedAfter)}MB (${df.format(newUsagePercent)}%)
    | 释放内存: ${df.format(freedMem)}MB
    | GC耗时: ${gcDuration}ms
    |========================
    """.stripMargin())
    
    // 将关键指标存入变量(可选)
    vars.put("mem_usage_before", df.format(usagePercent))
    vars.put("mem_freed_MB", df.format(freedMem))
} else {
    log.debug("当前内存使用率: ${df.format(usagePercent)}% (<70%),跳过GC")
}

JMeter 报告的内存使用率与操作系统显示的总内存使用率为什么不一致?

 

posted on 2025-06-03 14:06  yxchun  阅读(16)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3