面试官问:Spring Cloud 开发占用内存过高很卡,如何解决?

在Spring Cloud开发中,存在内存占用过高问题,即便本机测试请求量小,也会造成资源浪费,甚至使IDE卡死崩溃。解决方法是修改IDE针对每个项目的JVM参数,以Idea为例,介绍了具体操作及不同服务的资源设置,调整后效果明显。

问题:

在开发spring cloud过程中一个很严重的资源问题就是内存占用过高,而实际上本机开发测试并没有很大的请求量,所以这是对电脑资源的一种严重的浪费,甚至导致IDE卡死、崩溃。

一个完整包含eureka,steam,sleuth,config,rabbit,oauth2等一些列spring cloud全家桶应用和其他业务相关组件组成的单个服务在12G内存电脑上启动占用的内存就达到1到1.5G。如果同时需要启动很多个服务,内存完全不够用。

解决方法:

修改IDE针对每个项目的jvm参数。

这里以idea为例:

1.  打开Edit Configurations

Idea右上角,如图:

图片

参考如下配置:

图片

左边如果是spring cloud 的话肯定是在spring boot下,如果没有,可以点击左上角的+号手动添加,一般启动过的项目这里会有的。

关于jvm参数后面会讲。

这里要注意的是,register项目不需要太多资源(我这里设置128M),Gateway和config服务可以比register多一点(256M)。其它业务性服务才需要更多的资源(512M)。

请根据自己电脑配置情况调整,我的电脑是12G内存。

2.  关于jvm配置

参考1:http://blog.youkuaiyun.com/sdujava2011/article/details/50086933有如下描述

1.设置JVM内存的参数有四个:

  • -Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;

  • -Xms   Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

  • -Xmn   Java Heap Young区大小,不熟悉最好保留默认值;

  • -Xss   每个线程的Stack大小,不熟悉最好保留默认值;

推荐划水摸鱼地址:

https://www.yoodb.com/slack-off/home.html

参考2:https://www.cnblogs.com/w-wfy/p/6415856.html有如下描述:

一般用到最多的是:推荐一下公众号Java精选,回复Java面试,获取Spring Cloud面试题,支持在线随时随地刷题。

  • -Xms512m:设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

  • -Xmx512m:设置JVM最大可用内存为512M。

  • -Xmn200m:设置年轻代大小为200M。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

  • -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

效果

效果很明显

12G内存启动了14个服务和其他各种软件(idea 3个),内存占用如下图:

图片

作者:wanhuiguizong

blog.youkuaiyun.com/wanhuiguizong/article/details/79289986

<think>好的,我现在需要帮助用户了解如何从零开始搭建一个Spring项目。用户可能对Spring框架不太熟悉,所以需要从基础开始讲解。首先,我应该确定用户指的是Spring Framework还是Spring Boot,因为两者的搭建步骤有所不同。但考虑到用户提到的“从零开始”,可能更倾向于传统的Spring Framework项目,不过现在更常见的是使用Spring Boot来简化配置,所以或许应该以Spring Boot为例来讲解。 接下来,我需要回忆搭建Spring项目的基本步骤。通常包括创建项目结构、添加依赖、配置主类、编写配置文件、定义Bean、运行测试等。用户提供的引用内容中提到了Spring Cloud Alibaba和Spring Cloud项目的搭建,虽然这些是微服务相关的,但依赖管理和项目结构部分可能有参考价值。比如引用[2]中提到的pom.xml配置,parent和dependencyManagement的使用,这些对于Maven项目来说是通用的。 需要注意的是,用户可能没有使用过Spring Initializr,所以需要介绍如何手动创建项目,或者推荐使用Initializr来生成项目模板。不过手动配置可以更深入理解项目结构。另外,用户可能对依赖管理不太清楚,比如如何选择合适的Spring Boot版本,如何添加starter依赖等。 然后,步骤应该详细但不过于复杂。例如,第一步创建Maven项目,配置pom.xml,添加Spring Boot父项目和依赖。第二步编写主启动类,使用@SpringBootApplication注解。第三步创建配置文件application.properties或.yml。第四步定义Bean和控制器,最后运行测试。确保每个步骤都有示例代码,比如pom.xml中的依赖项,主类的代码结构,以及简单的REST控制器示例。 同时,用户可能遇到的题包括依赖未正确添加、主类位置不正确导致组件扫描失败、配置文件错误等,应该在注意事项中提到这些点。比如组件扫描的包路径,依赖冲突的解决,以及如何查看启动日志排查题。 另外,用户提供的引用[3]提到了使用RestTemplate和Eureka,但用户的题是关于基础Spring项目的搭建,所以这部分可能暂时不需要涉及,除非用户的题扩展到微服务。但可以简要提到Spring Boot的优势,比如内嵌服务器、自动配置等,让用户了解为什么推荐使用Spring Boot。 最后,生成的相关题需要围绕Spring项目的搭建展开,比如依赖管理、配置方式、与Spring Boot的区别、常见解决等。这有助于用户进一步学习可能遇到的后续题。 现在需要将这些思路整理成一个清晰的步骤指南,确保符合用户的要求:使用中文,结构清晰,语法正确,引用适当的参考资料。同时,按照系统级指令,数学表达式用$...$,独立公式用$$...$$,但在这个题中可能涉及较少,主要是在代码块和项目结构部分需要注意格式。</think>### 从零搭建 Spring 项目步骤详解(以 Spring Boot 为例) #### 一、环境准备 1. JDK 1.8+(推荐 JDK 11) 2. Maven 3.6+ 或 Gradle 3. IDE(推荐 IntelliJ IDEA) #### 二、项目搭建步骤 ##### 1. 创建 Maven 项目 新建项目时选择 Maven 骨架(或使用 [Spring Initializr](https://start.spring.io/) 生成模板),目录结构应包含: ``` src ├── main │ ├── java │ └── resources └── test/java ``` ##### 2. 配置 `pom.xml` 添加 Spring Boot 父项目与基础依赖(参考引用[2]的依赖管理模式): ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.5</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` ##### 3. 创建主启动类 在 `src/main/java` 下新建类: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` ##### 4. 添加配置文件 在 `src/main/resources` 下创建 `application.properties`: ```properties server.port=8080 spring.application.name=demo ``` ##### 5. 编写控制器 ```java @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello Spring!"; } } ``` #### 三、运行验证 1. 执行 `Application` 类的 `main` 方法 2. 访 `http://localhost:8080/hello` 应返回 "Hello Spring!" #### 四、注意事项 1. **组件扫描**:主类应放在根包下,确保能扫描到其他组件[^3] 2. **依赖冲突**:使用 `<dependencyManagement>` 统一管理版本(如引用[2]所示) 3. **配置覆盖**:可通过 `application.yml` 实现分层配置 4. **启动日志**:观察控制台输出,排查端口占用题 相关
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值