当前位置: 首页 > news >正文

nacos应用——占用内存过多问题解决(JVM调优初步)

在这里插入图片描述

问题描述

最近搞了一台1年的阿里云服务器,安装了一下常用的MySQL,Redis,rabbitmq,minio,然后有安装了一下nacos,结果一启动nacos内存占用就很高,就比较限制我继续安装其他镜像或者启动别的服务。

启动nacos之前:

在这里插入图片描述

启动nacos之后

在这里插入图片描述

问题分析

nacos启动参数初识

nacos本质就是启动了一个jar包,这里有它运行的一些参数
在这里插入图片描述

/usr/local/software/jdk/jdk1.8.0_371/bin/
java 
-Djava.ext.dirs=/usr/local/software/jdk/jdk1.8.0_371/jre/lib/ext:/usr/local/software/jdk/jdk1.8.0_371/lib/ext  
-Xms512m -Xmx512m -Xmn256m 
-Dnacos.standalone=true 
-Dnacos.member.list= 
-Xloggc:/usr/local/software/ali/nacos/8848/nacos/logs/nacos_gc.log -verbose:gc 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCTimeStamps 
-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=10 
-XX:GCLogFileSize=100M 
-Dloader.path=/usr/local/software/ali/nacos/8848/nacos/plugins/health,/usr/local/software/ali/nacos/8848/nacos/plugins/cmdb,/usr/local/software/ali/nacos/8848/nacos/plugins/selector 
-Dnacos.home=/usr/local/software/ali/nacos/8848/nacos 
-jar /usr/local/software/ali/nacos/8848/nacos/target/nacos-server.jar  
--spring.config.additional-location=file:/usr/local/software/ali/nacos/8848/nacos/conf/ 
--logging.config=/usr/local/software/ali/nacos/8848/nacos/conf/nacos-logback.xml 
--server.max-http-header-size=524288

这些参数是啥?

java -X

在这里插入图片描述

[root@iZuf61wy7p4tbr7lmwv18iZ ~]# java -X-Xmixed           混合模式执行(默认)-Xint             仅解释模式执行-Xbootclasspath:<: 分隔的目录和 zip/jar 文件>设置引导类和资源的搜索路径-Xbootclasspath/a:<: 分隔的目录和 zip/jar 文件>附加在引导类路径末尾-Xbootclasspath/p:<: 分隔的目录和 zip/jar 文件>置于引导类路径之前-Xdiag            显示附加诊断消息-Xnoclassgc        禁用类垃圾收集-Xincgc           启用增量垃圾收集-Xloggc:<file>GC 状态记录在文件中(带时间戳)-Xbatch           禁用后台编译-Xms<size>        设置初始 Java 堆大小-Xmx<size>        设置最大 Java 堆大小-Xss<size>        设置 Java 线程堆栈大小-Xprof            输出 cpu 分析数据-Xfuture          启用最严格的检查,预计会成为将来的默认值-Xrs              减少 Java/VM 对操作系统信号的使用(请参阅文档)-Xcheck:jni       对 JNI 函数执行其他检查-Xshare:off       不尝试使用共享类数据-Xshare:auto      在可能的情况下使用共享类数据(默认)-Xshare:on        要求使用共享类数据,否则将失败。-XshowSettings    显示所有设置并继续-XshowSettings:system(仅限 Linux)显示系统或容器配置并继续-XshowSettings:all显示所有设置并继续-XshowSettings:vm 显示所有与 vm 相关的设置并继续-XshowSettings:properties显示所有属性设置并继续-XshowSettings:locale显示所有与区域设置相关的设置并继续-X 选项是非标准选项。如有更改,恕不另行通知。

进一步解析

-XX参数主要有3种:行为参数,调优参数,调试参数行为参数(功能开关)
-XX:-DisableExplicitGC 禁止调用System.gc();但jvm的gc仍然有效
-XX:+MaxFDLimit 最大化文件描述符的数量限制
-XX:+ScavengeBeforeFullGC  新生代GC优先于Full GC执行
-XX:+UseGCOverheadLimit 在抛出OOM之前限制jvm耗费在GC上的时间比例
-XX:-UseConcMarkSweepGC 对老年代采用并发标记交换算法进行GC
-XX:-UseParallelGC 启用并行GC
-XX:-UseParallelOldGCFull GC启用并行,当-XX:-UseParallelGC启用时该项自动启用
-XX:-UseSerialGC  启用串行GC
-XX:+UseThreadPriorities  启用本地线程优先级性能调优
-XX:LargePageSizeInBytes=4m 设置用于Java堆的大页面尺寸
-XX:MaxHeapFreeRatio=70 GC后java堆中空闲量占的最大比例
-XX:MaxNewSize=size 新生成对象能占用内存的最大值
-XX:MaxPermSize=64m 老年代对象能占用内存的最大值
-XX:MinHeapFreeRatio=40 GC后java堆中空闲量占的最小比例
-XX:NewRatio=2 新生代内存容量与老生代内存容量的比例
-XX:NewSize=size 新生代对象生成时占用内存的默认值
-XX:ReservedCodeCacheSize=32m  保留代码占用的内存容量
-XX:ThreadStackSize=512 设置线程栈大小,若为0则使用系统默认值
-XX:+UseLargePages 使用大页面内存调试参数
-XX:-CITime 打印消耗在JIT编译的时间
-XX:ErrorFile=./hs_err_pid<pid>.log 保存错误日志或者数据到文件中
-XX:-ExtendedDTraceProbes  开启solaris特有的dtrace探针
-XX:HeapDumpPath=./java_pid<pid>.hprof 指定导出堆信息时的路径或文件名
-XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError="<cmd args>;<cmd args>" 出现致命ERROR之后运行自定义命令
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" 当首次遭遇OOM时执行自定义命令
-XX:-PrintClassHistogram  遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同
-XX:-PrintConcurrentLocks  遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同
-XX:-PrintCommandLineFlags 打印在命令行中出现过的标记
-XX:-PrintCompilation  当一个方法被编译时打印相关信息
-XX:-PrintGC  每次GC时打印相关信息
-XX:-PrintGCDetails  每次GC时打印详细信息
-XX:-PrintGCTimeStamps 打印每次GC的时间戳
-XX:-TraceClassLoading 跟踪类的加载信息
-XX:-TraceClassLoadingPreorder 跟踪被引用到的所有类的加载信息
-XX:-TraceClassResolution  跟踪常量池
-XX:-TraceClassUnloading  跟踪类的卸载信息
-XX:-TraceLoaderConstraints 跟踪类加载器约束的相关信息

回过头分析nacos

# 设置了Java的初始堆大小和最大堆大小,以及新生代大小
-Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -- 单体模式启动
-Dnacos.member.list= 
-Xloggc:/usr/local/software/ali/nacos/8848/nacos/logs/nacos_gc.log -verbose:gc# 和gc相关的参数
-XX:+PrintGCDetails      -- 每次GC时打印详细信息
-XX:+PrintGCDateStamps   -- 应该是打印一下日期
-XX:+PrintGCTimeStamps   -- 打印每次GC的时间戳
-XX:+UseGCLogFileRotation -- GC的日志
-XX:NumberOfGCLogFiles=10 -- 日志文件数量
-XX:GCLogFileSize=100M    -- 日志文件大小

问题解决

尝试设置参数

下面是原来的参数,可以看到似乎初始堆大小和最大堆大小,以及新生代大小遵循 2:2:1的比例,所以尝试把他们都除以2

在这里插入图片描述

参数修改如下所示

在这里插入图片描述

启动查看

现在启动试试,可以看到内存占用87%,确实少了,还能再运行其他的jar包

在这里插入图片描述

前端控制台也能正常启动,后续还需要进一步验证参数是否设置的合适

在这里插入图片描述

http://www.lryc.cn/news/222868.html

相关文章:

  • 大漠插件(二、Qt使用插件时注意事项)
  • CSS 浮动
  • 基于STM32+华为云IOT设计的火灾感知系统
  • 算法通关村第八关|白银|二叉树的深度和高度问题【持续更新】
  • cmake 之add_definitions使用误区
  • Leetcode—515.在每个树行中找最大值【中等】
  • 安防监控系统EasyCVR平台设备通道绑定AI算法的功能设计与开发实现
  • element 弹窗浏览器后退-遮照层还存在问题 以及跟vue keep-alive冲突
  • C++(Qt)软件调试---自动注册AeDebug(17)
  • 云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6
  • Java2 - 数据结构
  • 精解括号匹配问题与极致栈设计:揭开最大栈和最小栈的奥秘
  • 云存储/视频监控管理平台EasyCVR,使用sqlite数据库出现卡顿该如何优化?
  • 实战!工作中常用的设计模式
  • MySQL进阶_1.逻辑架构和SQL执行流程
  • 基于GCC的工具objdump实现反汇编
  • 排序算法的空间复杂度和时间复杂度
  • 【电路笔记】-基尔霍夫电路定律
  • 从零开始搭建React+TypeScript+webpack开发环境-基于axios的Ajax请求工具
  • 【uniapp小程序下载】调用uni.uploadfile方法在调试工具里是没有问题的,但是线上版本和体验版就调用不成功,真机调试也没问题
  • chatGLM中GLM设计思路
  • 卡牌游戏类型定制开发微信卡牌小程序游戏
  • web —— css(1)
  • 站群服务器的特性和好处是什么
  • 竞赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python
  • 软件设计模式的意义
  • vue基础知识十八:说说你对keep-alive的理解是什么?
  • Linux CentOS配置阿里云yum源
  • ESP32网络开发实例-Web服务器以仪表形式显示传感器计数
  • @Bean有哪些属性