背景

开发过程中发现机器指标异常,端口也hang住无响应,端口返回为timeout,对应探活检测也失败了。

现象

在st测试环节,突然每隔一段时间新接口就hang住无响应,观察机器监控也发现端口探活失败,看机器指标也无上报。

原因

开发新注入了bean,导致metaspace超出分配区间,频繁fullgc导致机器无响应。

解决

定位到时metaspace分配不足,通过调大分配空间解决。

定位过程

一般定位方向有两个,通过看机器指标就可以发现:

  • cpu方面:有死循环或线程过多,导致cpu被占用无法响应其他请求。
  • 内存方面:内存泄露导致频繁gc或fullgc。
  1. 查看机器指标:查看发现业务cpu占用无明显升高,有些许降低,元空间占用情况升高。
  2. 查看机器gc日志:发现机器一直在fullgc
  3. 查看机器堆栈dump信息:发现堆内存比分配的小得多,但gc日志显示每次gc的减小量都很小。所以大概猜到是元空间的问题了。
  4. 查看应用的启动参数,发现metaspace使用空间大于分配空间:应用启动时会分配jvm的内存分配情况,参数是-XX:MaxMetaspaceSize=XXX。发现分配了256M,高的时候就占了250+M了,很明显是新开发代码新注入的bean导致的,通过增大元空间参数解决。

一些扩展知识

端口探活方式

  • telnet <ip> <port>:telnet打通=端口通+网络通。只能分析  服务是否起来 或  网络是否正常  或  是否有防火墙等类似问题。此时服务可能不可用,但端口是通的。
  • nc -zv <ip> <port>:-z 只扫描端口,不发送数据,-v 显示详细信息。端口存活会显示 succeeded 或 open。
  • 对于rpc框架,可以自定义端口的探活方式,通过服务端实现healthCheck() 或ping()方法实现探活。

机器gc日志指标

  • 开启机器gc记录的指令

jdk8之前:

-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-Xloggc:/path/to/gc.log

jdk8之后:

-Xlog:gc*:file=/path/to/gc.log:time,uptime,level,tags
  • 机器gc日志存放位置:在Xloggc对应的路径下

机器jvm内存使用情况

  • 查看堆内存情况,每秒1次,输出10次:jstat -heap <PID> 1000 10
  • 查看metaspace情况:
    jstat -gcmetacapacity <pid>
    

jstat内存输出各指标含义:

指标含义
S0CSurvivor 0 区的容量(单位:KB)
S1CSurvivor 1 区的容量(单位:KB)
S0USurvivor 0 区已使用空间(单位:KB)
S1USurvivor 1 区已使用空间(单位:KB)
ECEden 区的容量(单位:KB)
EUEden 区已使用空间(单位:KB)
OCOld 区(老年代)容量(单位:KB)
OUOld 区(老年代)已使用空间(单位:KB)
PCPerm 区(永久代)容量(单位:KB)(JDK8之前)或 Metaspace 容量(JDK8及以后,部分实现中)
PUPerm 区(永久代)已使用空间(单位:KB)(JDK8之前)或 Metaspace 已用(JDK8及以后,部分实现中)
YGC从 JVM 启动到采样时发生的 Young GC(新生代GC)次数
YGCT从 JVM 启动到采样时 Young GC 所用时间(单位:秒)
FGC从 JVM 启动到采样时发生的 Full GC(老年代GC)次数
FGCT从 JVM 启动到采样时 Full GC 所用时间(单位:秒)
GCT从 JVM 启动到采样时 GC 总耗时(单位:秒),等于 YGCT + FGCT

机器线程情况分析

堆栈dump指令,只能用来分析进程中的线程情况。

jstack -<PID>

jstack的作用:jstack 是 JDK 自带的一个非常重要的命令行工具,主要用于生成 Java 进程的线程快照(线程堆栈信息),帮助开发者排查和分析 Java 应用中的线程相关问题。但无法得到堆内存,元空间等内存信息。

metaspace

  • 作用:是jdk8后取代永久代的空间,用于存放类的元数据(类结构,类方法,常量池等)。
  • 监控的指令:
jmap -clstats <pid>

jstat -gcmetacapacity <pid>

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/bicheng/86359.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86359.shtml
    英文地址,请注明出处:http://en.pswp.cn/bicheng/86359.shtml

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    【机器学习深度学习】张量基本操作

    目录 一、张量基本操作 1.1 执行代码 1.2 运行结果 1.3 代码解析 ✅ 1. 创建张量&#xff08;tensor、randn、zeros&#xff09; ✅ 2. 索引与切片&#xff08;类似 NumPy&#xff09; ✅ 3. 形状变换&#xff08;reshape、转置、压缩&#xff09; ✅ 4. 数学运算&#x…

    【微信小程序】8、获取用户当前的地理位置

    1、获取当前的地理位置 获取当前的地理位置、速度。当用户离开小程序后&#xff0c;此接口无法调用。开启高精度定位&#xff0c;接口耗时会增加&#xff0c;可指定 highAccuracyExpireTime 作为超时时间。 注意&#xff1a; 地图相关使用的坐标格式应为 gcj02。高频率调用会…

    Jenkins 常用定时构建脚本

    Jenkins 常用定时构建脚本 Jenkins 使用 cron 风格的语法来配置定时构建任务&#xff0c;以下是常用的定时构建脚本示例和说明&#xff1a; 基本语法 Jenkins 定时构建使用五个字段表示时间&#xff0c;格式为&#xff1a; MINUTE HOUR DOM MONTH DOWMINUTE - 分钟 (0-59)H…

    ActiveMQ漏洞复现

    以下内容均在nextcyber靶场环境中完成&#xff0c;请勿用于非法途径&#xff01; ActiveMQ 反序列化漏洞&#xff08;CVE-2015-5254&#xff09; Apache ActiveMQ是美国阿帕奇&#xff08;Apache&#xff09;软件基金会所研发的一套开源的消息中间件&#xff0c;它支持Java消息…

    环保处理设备远程运维管理解决方案

    在环保产业蓬勃发展的当下&#xff0c;环保处理设备厂商面临着愈发激烈的市场竞争。为助力环保处理设备厂商在竞争中脱颖而出&#xff0c;御控工业智能网关打造了一套完善的PLC数据采集设备运维管理平台解决方案。此方案凭借其独特优势&#xff0c;能为环保处理设备厂商带来显著…

    嵌入式学习笔记DAY43(ARM架构)

    一、RAM分类 sram&#xff08;静态随机存取存储器&#xff09;&#xff1a; 原理&#xff1a;使用晶体管来存储二进制数据0和1&#xff0c;通过双稳态电路&#xff08;由多个晶体管组成&#xff09;来保持数据状态&#xff0c;只要持续供电&#xff0c;数据就能稳定保存。数据读…

    2025国际无人机应用及防控大会四大技术专题深度解析

    2025国际无人机应用及防控大会四大技术专题深度解析 2025国际无人机应用及防控大会四大技术专题深度解析1 无人机系统技术专题技术特点与应用领域国内领军企业及案例风险挑战与发展方向 2 测控与通信导航技术专题技术创新与应用突破领先企业及解决方案现存问题与发展趋势 3 任务…

    DD3118S:USB3.0+Type-c双头TF/SD二合一高速0TG多功能手机读卡器ic

    DD3118S封装是QFN42, GL3224封装是QFN32 &#xff0c;设计同样一款3.0读卡方案&#xff0c;GL3213S需要电容、电阻外围器件一起要29颗&#xff0c;而DD3118S只需要13颗&#xff0c;方案精简且设计简单 DD3118S支持USB3.0Type-c双头TF/SD二合一 &#xff0c;高速0TG多功能手机读…

    如何在FastAPI中玩转GitHub认证,让用户一键登录?

    title: 如何在FastAPI中玩转GitHub认证,让用户一键登录? date: 2025/06/22 09:11:47 updated: 2025/06/22 09:11:47 author: cmdragon excerpt: GitHub第三方认证集成通过OAuth2.0授权码流程实现,包含用户跳转GitHub认证、获取授权码、交换访问令牌及调用API获取用户信息四…

    深入JVM:从零到实战,解锁Java性能与调优的终极武器

    “什么&#xff1f;你还在写CRUD&#xff1f;面试官问个JVM调优直接哑火&#xff1f;线上服务OOM了只能重启大法&#xff1f;” —— 别慌&#xff0c;掌握JVM&#xff0c;你也能成为团队里的“定海神针”&#xff01; 作为一名Java开发者&#xff0c;无论你是刚入行的新人还是…

    MyBatis 中的 resultType 与 resultMap:区别、使用场景及示例详解

    目录 一、什么是 resultType 1. 定义 2. 特点 3. 使用场景 4. 示例 示例 1&#xff1a;返回一个实体类对象 对应的 Java 类&#xff1a; 示例 2&#xff1a;返回 Map 集合 返回的每个记录是一个 Map&#xff0c;例如&#xff1a; 二、什么是 resultMap 1. 定义 2. …

    Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory

    该问题的原因因为配置的JAVA_HOME环境变量路径中的包括空格字符导致的错误。 一、问题排查 输出当前环境变量 $JAVA_HOME的路径地址&#xff0c;观察路径中是否存在空格 echo $JAVA_HOME二、问题解决 将JAVA_HOME路径改为你安装的jdk路径&#xff0c;注意你的版本号可能与我的会…

    npm(或pnpm)时报:证书过期 certificate has expired问题

    项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 首先安装pnpm npm install -g pnpm //检查安装成功的版本 pnpm -v 在拉芋道管理系统&#xff0c;安装依赖pnpm i 时报证书过期 更改了镜像也一样 解决方案&#xff1a; 提示&#xff1a;这里填写该…

    回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型

    回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型 目录 回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 KAN作为这两年最新提出的机制&#xff0c;目前很少人用&#xff0c;很适合作为预测的创新点&…

    人生笔记Real:记录生活点滴,守护珍贵记忆

    在快节奏的现代生活中&#xff0c;我们常常会有一些瞬间的灵感、难忘的经历或者需要记录的重要事项。然而&#xff0c;如何高效地记录这些内容&#xff0c;并确保它们不会随着时间的流逝而丢失&#xff0c;成为了一个值得思考的问题。《人生笔记Real》正是这样一款简单好用的笔…

    自动驾驶数据特征提取实战:用Python打开智能驾驶的新视角

    自动驾驶数据特征提取实战:用Python打开智能驾驶的新视角 聊起自动驾驶,很多朋友第一时间想到的可能是“车上的摄像头多牛,传感器多先进”,但让我告诉你,真正决定自动驾驶“大脑”能不能跑得顺畅、跑得准的,是数据的“骨头”—特征。 没错,机器学习、深度学习的基础都…

    从零搭建共享棋牌室物联网系统:硬件选型与避坑指南!

    近来&#xff0c;24小时共享棋牌室凭借“低成本、无人化、高坪效”的特点成为创业热点。但许多项目在硬件选型阶段就踩坑不断——设备不兼容、安装返工、售后无门等问题频发。本文将结合实战经验&#xff0c;手把手教你从零搭建稳定可靠的棋牌室物联网硬件系统&#xff0c;并附…

    NPM 依赖包版本号 `~` 和 `^` 的区别及最佳实践

    本文将深入浅出地解释 ~ 与 ^ 在 package.json 中的含义&#xff0c;并结合实际开发流程给出团队协作与发布上线的最佳版本管理策略。 一、版本号的基本结构 NPM 依赖的版本号遵循 SemVer&#xff08;语义化版本&#xff09; 标准&#xff1a; 主版本号.次版本号.补丁号Major…

    uniapp报错Cannot read property ‘dataset‘ of null

    如果你引入的组件在uniapp分包路径中&#xff0c;就会报错

    服务器常见问题以及解决方案

    以下是服务器常见问题及对应的维护解决方案&#xff0c;涵盖硬件、网络、软件、安全等核心场景&#xff0c;基于最新行业实践整理&#xff1a; 一、硬件层故障‌ 硬盘失效‌ 现象‌&#xff1a;系统崩溃、IO错误、SMART告警。 解决‌&#xff1a; 立即更换故障盘&#xff0c…