记 K8S引发的Springboot项目频繁重启

k8s问题定位】k8s中的pod不停的重启,定位问题原因与解决方法 k8s中的pod不停的重启,定位问题原因与解决方法 阅读详情
背景介绍

1、项目组成: k8s+docker+springboot+jdk1.8

2、问题描述: 在一次线上环境升级后springboot项目服务(pod)频繁重启,间隔时间较短,甚至于项目启动后又立即重启

问题排查

1、查看pod事件kubectl -n xxx get event

2、查看pod内容kubectl -n xxx describe pod xxxx 重启原因是oomkilled

3、检查项目代码 :没有发现可能导致内存泄漏的代码

4、查看pod使用内存:kubectl -n xxx top pod

5、查看java堆栈信息: 使用jstack pid jstat -gc pid 1s 2 jamap -heap pid java -XX:+PrintFlagsFinal -version|grep HeapSize 等命令检查内存使用情况,发现jvm初始化的内存(32g)远大于k8s分配的内存大小(4g)于是网上查找了一下资料:

https://blog.csdn.net/yzh_1346983557/article/details/89216494

https://blog.csdn.net/zhangxiangui40542/article/details/119862437

结论

做了实际验证,发现在没有对jvm的参数做配置时,jvm分配的堆栈大小是根据宿主机内存进行分配的;

在制作docker镜像的时,对jvm的参数进行配置java -Xms1024m -Xmx1024m -jar app.jar问题得以解决;

备注: 以上两位博主的观点不一致,是不是和k8s的环境配置有关不得而知;

k8s pod频繁自动重启 问题描述:某个服务重启频率非常高,监控告警里产生了大量的“jvm内存超过limit 85%”和服务503告警 jvm内存超警戒告警 服务503不可用告警 问题原因:该服务的jvm启动参数设置不合理 排查思路: 刚开始粗浅的认为是服务压力太大,于是增加pod数量,然而问题依旧 查看服务运行状态,发现服务频繁重启 查看该服务的pod资源配额配置 进入容器,查看该服务的的jvm启动参数,发现最大堆内存设置竟然超过了pod资源配额的limit值 调整jvm最大堆内存(Xmx)的值不超过 阅读详情

相关推荐

SpringBoot应用安全开发与生产部署实战:JWT集成、JAR打包与服务器运维

在现代Java后端开发中,身份认证与授权是保障应用安全的核心机制。JWT(JSON Web Token)作为一种基于JSON的开放标准,通过数字签名实现无状态、分布式的身份验证,其原理是将用户信息编码为令牌,由服务端签发、客户端存储并在请求中携带,有效解决了Session在分布式环境下的扩展性问题。该技术为微服务架构和前后端分离应用提供了轻量级的认证解决方案,其价值在于简化服务端状态管理并提升系统可伸缩性。在实际工程实践中,JWT需与Spring Security框架深度集成,并严格防范算法篡改、敏感信息泄

chouzu8463的博客 399

详解SpringBoot项目docker环境运行时无限重启问题

可能是我开始处理问题的思路不对,现在描述问题可能也有点乱,但是里面可能的处理方式希望能帮到遇到我这个坑的人 描述:springboot项目,docker镜像里面运行,看docker的日志,项目启动成功后,隔了一分钟左右他就自动重新启动,然后造成网站接口访问的时候nginx报502 gateway啥的,有两台服务器,一个是文件服务器,运行了很简单的上传下载文件的代码以及验证token,另一台运行了java应用,两台服务器都在一次更新项目的镜像,运行过后遇到了这个问题,很奇怪。 然后我将项目弄成jar包直接java -jar xxx.jar,在应用服务器里面直接运行,然后卡在一些地方无法继续启动,

SpringBoot应用启动卡死无日志?系统化排查与解决方案

在Java应用开发中,应用启动失败是常见的运维挑战,尤其当进程卡住且无任何异常日志输出时,问题定位尤为困难。这类问题通常涉及JVM线程管理、资源等待及框架生命周期等底层原理。从技术价值看,掌握系统化诊断方法能显著提升线上问题恢复速度与系统可用性。在实际应用场景中,无论是单体应用还是微服务架构,启动卡死可能源于Bean初始化死锁、外部资源连接超时、依赖冲突或容器环境不匹配。本文聚焦SpringBoot框架,针对【线程转储】分析和【外部资源连接】超时两大高频热词,提供从环境检查到代码层级的全链路排查指南,帮助开

weixin_30755393的博客 326

一次 微服务在服务器上,启动之后,不停重启

原因:spingboot项目 使用热部署(在pom文件中)问题: 微服务在服务器上,启动成功后,继续不停重启

qq_44103635的博客 370

K8S系列】Pod重启策略及重启可能原因

1 重启策略 1.1Always Pod中的容器,不管因为什么原因停止,都会自动重启。 该为默认策略, 没有定义重启策略时,默认的就是always 1.2OnFailure Pod中的容器,非正常停止/异常退出时,会自动重启容器,如果是正常停止,则不会 1.3Nerver Pod中容器不管以什么原因退出,都不会自动重启容器 自动重启的可能原因: 1.Xms超出了k8s分配 2.docker容器的内存限制 3.出现OOMKilled事件

颜淡慕潇 1万+

集群容器频繁OOMKilled的排查经历

发现日志并无异样,也没有相关异常报错信息排查问题细致!注意分析工具的英文解释,每一个英文都得关注(粗心)日常开发引入jar包一定要深入理解最佳实践后才使用,切勿浅尝辄止能用就行一个已经加载的类被卸载的几率是很小的同时被卸载的时间也是不确定的工具方面mat似乎不太好查看已加载类信息,比较侧重不同类加载器加载同一个类导致的重复类问题visualvm也不太好查看已加载类信息arthas不错 功能全面。

CallmeMaybe 3389

现场问题排查-k8s(docker)上某服务pod频繁自动重启

k8s(docker)中pod频繁重启问题排查

leandzgc的专栏 7516

springBoot健康检查与k8s探针

健康检查、k8s探针

magic_guo的博客 1788

K8s健康检查核心:Readiness与Liveness深度解析(含Spring Boot实战)

本文系统解析Kubernetes中Readiness与Liveness探针的核心差异与应用实践。Readiness探针作为"流量开关"控制Pod是否接收请求,适用于依赖异常等场景;Liveness探针作为"生死判定器"监测不可恢复异常并触发重启。文章通过SpringBoot实例演示了探针配置、自定义健康检查实现,并给出生产环境参数调优建议。重点强调:Readiness+preStop可实现优雅下线,二者协同工作能有效保障服务稳定性,但需避免混用导致流量抖动或频繁重启

SpaceAIGlobal的博客 863

Kubernetes生产级容器镜像优化:大小、速度、安全与确定性四维实践

容器镜像是Kubernetes编排的最小可交付单元,其质量直接决定集群稳定性与资源效率。从基础概念看,优化并非单纯压缩体积,而是围绕OCI镜像规范,在镜像构建、拉取、启动、运行全链路中实现可预测性;原理上需兼顾多阶段构建、分层缓存、多架构支持与运行时约束;技术价值体现在降低Pod启动延迟(≤1.5秒)、减少镜像仓库存储压力(压缩65%+)、消除CVE高危漏洞(Trivy零CRITICAL)及保障跨环境构建一致性(SHA256确定性);典型应用场景覆盖金融核心系统、边缘IoT网关与CI/CD流水线;本文聚焦生

weixin_34034261的博客 461

运维工程师如何写好分布式项目简历:从操作员到架构师的思维转变

分布式系统是现代IT架构的核心,其核心原理在于通过多节点协作实现高可用、可扩展与容错。理解CAP定理、服务发现、负载均衡等基础概念是构建稳定分布式服务的技术基石。在工程实践中,运维工程师需要从被动响应转向主动架构参与,通过Kubernetes容器编排、Redis集群调优、全链路监控等技术手段保障系统稳定性。本文聚焦运维工程师在简历中呈现分布式项目经验时的常见误区,例如技术名词堆砌、职责描述模糊等,并提供基于“场景-问题-技术-结果”结构的优化方案,帮助候选人将运维经验转化为体现架构思维与问题解决能力的有力证

weixin_34319111的博客 637

Java远程调试实战:从JPDA原理到K8s环境安全配置指南

Java调试是开发过程中定位问题的核心手段,其底层基于JPDA(Java平台调试体系结构)实现。JPDA通过JDWP协议定义了调试器与JVM间的通信标准,支持套接字传输实现跨网络调试。这项技术允许开发者对远程服务器、容器乃至K8s集群中的Java进程进行实时诊断,极大提升了复杂环境下的问题排查效率。在微服务与云原生场景下,远程调试能有效解决测试环境、生产环境难以复现的Bug,例如数据不一致、偶发性异常等问题。本文以Java远程调试为主题,深入解析其Attach与Listen模式,并提供从基础命令行到Dock

weixin_34326558的博客 388

SpringBoot项目避坑指南:Hibernate的IN查询竟吃光8G内存?

本文深入剖析了一个SpringBoot项目中因Hibernate的IN查询导致内存溢出的典型案例。问题根源在于Hibernate的QueryPlanCache会为不同参数长度的IN查询生成独立的查询计划,在高并发且参数长度多变的场景下,缓存无限增长最终引发OOM。文章提供了通过配置`plan_cache_max_size`和启用`in_clause_parameter_padding`等核心解决方案,并分享了使用Arthas进行诊断和代码层的最佳实践,帮助开发者有效规避此类内存陷阱。

vim8coder的博客 186

SpringBoot整合Lettuce连接池超时?5种解决方案实测对比(含K8s环境适配)

本文针对SpringBoot整合Lettuce连接池常见的RedisCommandTimeoutException超时问题,深入剖析了其根源,并提供了五种实测有效的解决方案。内容涵盖基础参数调优、启用连接验证、定时保活、拓扑刷新及客户端切换,特别针对K8s动态环境给出了综合配置模板,帮助开发者彻底解决连接池超时难题。

k0l1m2n3o的博客 459

SeqGPT-560M与Java集成实战:SpringBoot微服务构建指南

本文介绍了如何在星图GPU平台上自动化部署nlp_seqgpt-560m镜像,构建高性能NLP微服务。该镜像支持中文文本分类、实体抽取等任务,典型应用于电商评论情感分析、金融风控文本理解等场景,助力Java SpringBoot系统快速集成轻量级大语言模型能力。

weixin_42576804的博客 278

SpringBoot Jar包加密实战:使用classfinal保护Java代码安全

在Java应用开发中,代码保护是保障知识产权和交付安全的重要环节。其核心原理在于对编译后的字节码文件进行处理,防止通过反编译工具轻易获取源代码。字节码加密技术通过自定义类加载器,在运行时动态解密,能有效提升静态分析的门槛,为商业软件和SaaS产品提供基础的安全保障。这一技术尤其适用于需要交付给客户或部署在公有云环境的SpringBoot应用,防止核心业务逻辑和敏感配置泄露。本文以热门的开源工具classfinal为例,结合Maven插件集成与自定义类加载机制,详细解析如何为SpringBoot Fat Ja

weixin_30580341的博客 390

SpringBoot多环境配置实战:3种方法详解与选型指南

在软件工程实践中,配置管理是保障应用在不同生命周期阶段(开发、测试、生产)稳定运行的关键环节。其核心原理在于通过环境隔离机制,将可变配置与代码解耦,实现一套代码适应多种部署场景。这项技术的核心价值在于提升开发效率、保障部署安全,并实现CI/CD流程的自动化。典型的应用场景包括微服务架构下的服务部署、团队协作开发以及云原生环境中的应用发布。SpringBoot作为主流的Java开发框架,其YAML多环境配置方案提供了多种实现路径,例如通过单一文件多Profile文档块实现集中管理,或利用独立的`applica

weixin_34318272的博客 468

Qwen3-ASR-1.7B企业级部署指南:SpringBoot微服务集成方案

本文介绍了如何在星图GPU平台上自动化部署Qwen3-ASR-1.7B镜像,构建高可用企业级语音识别服务。依托平台能力,用户可快速完成容器化部署与SpringBoot微服务集成,典型应用于客服对话转录、在线教育音视频字幕生成等场景,显著提升语音处理效率与准确率。

weixin_31620365的博客 299
上一篇: SpringBoot注解@Scheduled定时任务的运行机制
燕子不会飞
博客等级 码龄8年 0粉丝 · 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值