Java程序内存溢出的解决方法

前言

最近有个项目线上出现了内存溢出的情况,以前没出现过这种情况,排查后发现原来是启动脚本的问题,堆内存分配的不足。如果在运行Java应用程序时,设置的内存参数不足以满足应用程序的内存需求,可能会导致 OutOfMemoryError(OOM)异常,它表示Java虚拟机没有足够的内存来分配新对象。可能会有不同的子类型的OutOfMemoryError,如:

Java heap space:堆空间不足。

GC overhead limit exceeded:垃圾回收占用过多时间。

PermGen space(仅适用于Java 8及之前的版本):永久代空间不足。

StackOverflowError:当线程调用的方法调用层级太深时,将抛出此错误。

InternalError :这可能是由于JVM内部问题导致的,通常不太常见。

调整方法

1. 设置堆大小


- `-Xms<size>`:设置JVM的初始堆大小。
- `-Xmx<size>`:设置JVM的最大堆大小。 


设置初始堆大小为512MB,最大堆大小为2GB:

java -Xms512m -Xmx2g -jar yourfile.jar


 

2. 设置栈大小


- `-Xss<size>`:设置线程的栈大小。


设置线程栈大小为256KB:

java -Xss256k -jar yourfile.jar


 

3. 设置永久代大小(仅适用于Java 8及之前的版本)


- `-XX:PermSize=<size>`:设置永久代初始大小。
- `-XX:MaxPermSize=<size>`:设置永久代最大大小。


设置永久代初始大小为128MB,最大大小为256MB:

java -XX:PermSize=128m -XX:MaxPermSize=256m -jar yourfile.jar

4. GC算法

Serial GC(串行GC):适用于单核处理器或小型应用程序。

  -XX:+UseSerialGC

Parallel GC(并行GC):多线程垃圾回收器,适用于多核处理器和需要高吞吐量的应用程序。

  -XX:+UseParallelGC

CMS GC(Concurrent Mark-Sweep GC):并发垃圾回收器,适用于需要低停顿时间的应用程序。

  -XX:+UseConcMarkSweepGC


 

G1 GC:Garbage-First GC,适用于大内存、需要低停顿时间的应用程序。

  -XX:+UseG1GC

5.GC日志
 

启用GC日志
 

  -verbose:gc -Xloggc:<log_file_path>


 

设置GC日志文件路径

  -Xloggc:/path/to/gc.log


 

设置GC日志文件的滚动策略

-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<number_of_files> -XX:GCLogFileSize=<size>


 

设置GC详细信息级别

  -XX:+PrintGCDetails


 

设置GC日志打印时间戳

  -XX:+PrintGCDateStamps

设置GC日志打印时间戳的格式

  -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps

最终命令


将所有参数组合起来,得到一个完整的命令:
java -Xms512m -Xmx2g -Xss256k -XX:PermSize=128m -XX:MaxPermSize=256m +UseG1GC -verbose:gc -Xloggc:/path/to/gc.log -XX:+PrintGCDetails -jar yourfile.jar

这个命令设置了初始堆大小为512MB,最大堆大小为2GB,线程栈大小为256KB,永久代初始大小为128MB,最大大小为256MB,将G1 GC算法与启用的GC日志一起使用,并设置了GC日志文件路径和详细信息级别。最终运行你的jar包

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

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

相关文章

error An unexpected error occurred: “https://registry.npm.taobao.org

背景&#xff1a; 想使用yarn命令结果报错 问题原因&#xff1a; 原来证书到期了 http://registry.npm.taobao.org/ 把这个放到浏览器搜索的时候自动换成https://registry.npmmirror.com/ 方案&#xff1a; npm cache clean --forcenpm config set registry https://registry…

政安晨:示例演绎机器学习中(深度学习)神经网络的数学基础——快速理解核心概念(一){两篇文章讲清楚}

进入人工智能领域免不了与算法打交道&#xff0c;算法依托数学基础&#xff0c;很多小伙伴可能新生畏惧&#xff0c;不用怕&#xff0c;算法没那么难&#xff0c;也没那么玄乎&#xff0c;未来人工智能时代说不得人人都要了解算法、应用算法。 本文试图以一篇文章&#xff0c;…

comfyui换脸学习笔记

目录 ComfyUI_Lam 人脸融合方案&#xff1a; 圣诞写真工作流 IPadapter faceID/faceID plus/faceID plusV2/Reactor换脸效果对比来 ComfyUI_Lam 人脸融合方案&#xff1a; demo效果还可以 ComfyUI_Lam: ComfyUI插件&#xff0c;人脸融合&#xff0c;视频加载&#xff0c;视…

智胜未来,新时代IT技术人风口攻略-第二版(弃稿)

文章目录 抛砖引玉 鸿蒙生态小科普焦虑之下 理想要落到实处校园鼎力 鸿蒙发展不可挡培训入场 机构急于吃红利企业布局 鸿蒙应用规划动智胜未来 技术人风口来临 鸿蒙已经成为行业的焦点&#xff0c;未来的发展潜力无限。作为一名程序员兼UP主&#xff0c;我非常荣幸地接受了邀请…

Acwing---844.走迷宫

走迷宫 1.题目2.基本思想3.代码实现 1.题目 给定一个 nm 的二维整数数组&#xff0c;用来表示一个迷宫&#xff0c;数组中只包含 0 或 1&#xff0c;其中 0 表示可以走的路&#xff0c;1 表示不可通过的墙壁。最初&#xff0c;有 一个人位于左上角 (1,1)处&#xff0c;已知该…

VMware清理拖拽缓存 Ubuntu硬盘情况占用分析

这两天在尝试编译Linux源码&#xff0c;我在win上将源码下载下来然后复制到ubuntu上&#xff0c;这一步我粗略看到了三种方法&#xff1a;安装VM tools&#xff0c;就可以使文件正常的在win和ubuntu中复制剪切&#xff1b;使用scp命令将win和linux系统链接起来&#xff1b;使用…

幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?

腾讯云幻兽帕鲁服务器配置怎么选&#xff1f;根据玩家数量选择CPU内存配置&#xff0c;4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置&#xff0c;腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法&#xff…

鸿蒙开发系列教程(二十)--页面间动画

页面间动画 两个页面间发生跳转&#xff0c;一个页面消失&#xff0c;另一个页面出现&#xff0c;这时可以配置各自页面的页面转场参数实现自定义的页面转场效果 页面进入&#xff1a; PageTransitionEnter({type?: RouteType,duration?: number,curve?: Curve | string,…

【Java程序设计】【C00269】基于Springboot的漫画网站(有论文)

基于Springboot的漫画网站&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的漫画网站 本系统分为系统功能模块、管理员功能模块、以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、漫画投稿、…

MacBook Pro如何安装rust编程环境

安装过程分为以下几步&#xff1a; 1. 安装Homebrew。Homebrew是一个流行的MacOS的包管理器&#xff0c;可用于方便地安装各种软件。打开终端&#xff0c;运行以下命令&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD…

CTFshow web(php命令执行 68-71)

web68 还是那句话&#xff0c;没看到flag在哪&#xff0c;那就优先找到flag位置 这里cvar_dump(scandir("/")); 直接输出根目录的位置&#xff0c;然后查看源代码&#xff0c;发现flag位置为flag.txt 知道flag在根目录下面的flag.txt直接访问就好了 cinclude(/flag…

计算机网络——10FTP

FTP FTP&#xff1a;文件传输协议 向远程主机上传输文件或从远程主机接收文件客户/服务器模式 客户端&#xff1a;发起传输的一方服务器&#xff1a;远程主机 ftp:RFC 959ftp服务器&#xff1a;端口号为21 FTP&#xff1a;控制连接与数据连接分开 控制连接 FTP客户端与FTP服…

谷粒商城【成神路】-【6】——商品维护

目录 &#x1f9c2;1.发布商品 &#x1f953;2.获取分类关联品牌 &#x1f32d;3.获取分类下所有分组和关联属性 &#x1f37f;4.商品保存功能 &#x1f9c8;5.sup检索 &#x1f95e;6.sku检索 1.发布商品 获取用户系统等级~&#xff0c;前面生成了后端代码&#xff…

Rust的if let语法:更简洁的模式匹配

在Rust中&#xff0c;if let是一种简洁的模式匹配语法&#xff0c;用于处理只关心一种匹配而忽略其他匹配的情况。这种语法不仅使代码更精炼&#xff0c;减少了缩进和模板代码&#xff0c;还放弃了穷举所有可能的情况&#xff0c;使得代码更加简洁易读。 if let语法的基本使用…

寒假思维训练day21

今天更新一道不错的状态压缩DP题&#xff0c;顺带总结一下状态压缩DP。 摘要&#xff1a; Part1 浅谈状态压缩DP的理解 Part2 浅谈对状态机DP的理解 Part3 关于状态压缩DP的1道例题 Part1 状态压缩DP 1、状态压缩DP&#xff1a; 事物的状态可能包含多个特征&#xff0c;…

算法基础——单调栈,单调队列

目录 1.单调栈 例题&#xff1a;【模板】单调栈 例题:求和 2.单调队列 例题&#xff1a;滑动窗口 1.单调栈 例题&#xff1a;【模板】单调栈 可以想象出一个柱状图&#xff0c;值越大&#xff0c;这个柱子越高 以此题的样例为例&#xff1a; 第一个数为7&#xff0c;想…

mysql全国省市县三级联动创表sql(一)

1. 建表sql CREATE TABLE province (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code CHAR ( 6 ) NOT NULL COMMENT 省份编码,name VARCHAR ( 40 ) NOT NULL COMMENT 省份名称 ) COMMENT 省份信息表;CREATE TABLE city (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code …

Atmel ATSHA204应用总结

1 ACES软件安装 Atmel Crypto Evaluation Studio (ACES) https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/Atmel%20Crypto%20%20Studio%20(ACES) 2 基本概念 ACES CE&#xff1a;Atmel Crypto Evalution Studio Configuration Environment&#xff08;基于加…

[Python] 如何用import导入模块

本篇博客来记以下关于import导入模块的笔记~ 可莉将这篇博客收录在了&#xff1a;《Python》 可莉推荐的优质博主主页&#xff1a;Kevin ’ s blog 我们在Python中可以使用import从标准库中导入一天模块&#xff0c;模块相当于是一个 .py 文件&#xff0c;我们导入后调用相当于…

Linux Chrome无法启动的原因(适用于Linux Edge)

文章目录 前言问题发现解决方案推广到Edge 前言 被Windows给贯坏了&#xff0c;因为Windows重启之后能够始终加载上一次没能关闭的页面&#xff0c;这就让我使用这种方法保存当前不想关、收藏了也容易忘的页面。结果这种操作直接导致Linux上的chrome就直接启动不了。记录一下解…