amazon-web-services - Play Framework - AWS 的生产配置线程/数据库连接
问题描述
我们有一个 Play Framework 应用程序,但我们遇到了生产问题。我很好奇人们在您的 production.conf 上使用了哪些设置来确保您的 Web 服务器不会变慢。我们有一个基本的 Web 应用程序,它与 Mysql 通信、发送电子邮件、文本消息,并有一个登录门户。
如果您使用的是 AWS EC2 实例(例如 t2.large),您在线程池上设置了多少线程,在数据库连接池上设置了多少连接,以及您的 Xms 和 Xmx 内存设置是多少?
谢谢你。
解决方案
如果您使用的是 AWS EC2 实例(例如 t2.large),您在线程池中设置了多少线程
我认为这可能是您面临问题的可能根本原因之一。拥有一个ThreadPool
,或者更准确地说ExecutionContext
是包装一些ExecutorService
(例如FixedThreadPoolExecutorService
)被认为是不好的做法,因为它EC
在应用程序内部的相同实例可用于阻塞操作,如数据库访问 - 例如在您的情况下是 MySql,这最终会导致整个线程其他应用程序部分中的阻塞和性能问题,例如新的连接处理或响应呈现。
您需要做的是使用不同EC
的实例进行阻塞和非阻塞操作 - 我们称它们frontend EC
为(用于非阻塞)和backend EC
(用于阻塞)。
frontend EC
您需要在视图和服务级别(API 控制器、业务逻辑等)中使用;backend EC
您需要在 DAO 应用程序级别或任何可能的阻塞解析中使用;
在这两者之间分配资源的方式EC
实际上取决于上下文。您可以从例如 80% 的线程frontend EC
和其他 20%的线程开始backend EC
,然后继续调整,直到您获得所需的性能结果。
但总的来说,您提出的问题取决于很多背景——工程领域通常没有灵丹妙药。
希望这可以帮助!
推荐阅读
- python - 如何传递参数来修改带有参数的函数的装饰器
- arduino - Arduino Loop 无法识别中断条件?
- ios - 如何设置 Xamarin iOS SDK 版本以在 Azure Devops 上构建
- python - MITM Proxy - 通过 python 脚本拦截和修改 https 内容
- powershell - 修改 Powershell 4.0 中的本地用户属性描述
- c++ - 链接 .lib 和 .h 文件 (OpenJDK 1.8)
- java - Java invoke class to call method inside
- javascript - 将对象的数组属性作为 React 组件 prop 传递会引发异常
- css - css 过渡不适用于渐变?
- javascript - 在 node.js 的命令行中传递参数