java - 针对高 CPU/内存工作负载优化 Spring Boot 后端
问题描述
我正在运行一个 Spring Boot 应用程序,它充当前端 Javascript 应用程序的后端。前端作为静态资源提供给客户端,后端提供来自它的 API 请求。该应用程序最初设计为在本地运行,但应以允许轻松移植到云原生解决方案的方式构建。
我希望后端做一些繁重的 ETL 工作,这在内存和 CPU 方面会很繁重。同时,它不需要扩展以服务许多并发请求 - 它只需要服务启动和管理作业的请求,这些请求将由与其交互的单个用户调用。
我可以调整哪些参数以针对此类部署进行微调?
目前的想法:
- 减少
server.tomcat.max-threads
到一位数以最小化请求线程池的占用空间,因为我预计不会同时处理超过一两个 - 对数据库连接池执行相同的操作
- 微调
Xms
和Xmx
启动 JAR 时
我将不胜感激有关如何确保 Java 应用程序在系统上占用尽可能大的空间以及我可以调整的 Spring Boot 特定参数的任何其他见解。谢谢你。
解决方案
如果您有长时间运行的后台任务,我会卸载工作到线程池并将最大线程数设置为系统中的 CPU 数。还要在 executor 的队列上设置一个最大容量,这样你就不会因为太多的待处理工作而使它超载。
卸载到不同的线程将确保容器的线程保持可用,并且您不会最终得到一个完全无响应的系统。
您对最大堆大小和连接池的建议是有效的。
推荐阅读
- c# - 如何拆分字符串类型坐标
- javascript - ./src/app.js 中的错误模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):错误:找不到模块'@babel/preset-present-env'
- r - 将函数应用于 R 中数据框中的每一列
- laravel - 如何从 Firebase 托管 URL 与 API 服务器通信?
- python - 如何倒数和数到永远没完没了
- ubuntu - 使用 WSL 的 Ubuntu 20.04 上的 GNU Radio 3.8:CMake 警告,未指定构建类型
- python - 如何制作一个不和谐的机器人网络仪表板?
- gradle - 如何使用 gradle 将依赖项添加到非 gradle 项目?
- node.js - 访问下 10 项分页 firestore Admin SDK
- r - 创建一个 Y 变量,它是 X 变量的计数