问题标签 [cloudcaptain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
398 浏览

postgresql - Play Framework 2.5 请求随机超时

症状

经过一段时间的正常运行后,我们的后端将停止对其大多数端点做出响应。对于那些人来说,它只会开始表现得像个黑洞。一旦处于这种状态,如果我们不采取任何行动,它就会一直呆在那里。

更新

当后端处于无响应状态时,我们可以使用我们制作的数据库转储来重现此行为。

基础设施设置

我们在 AWS 上的一个 EC2 实例上运行 Play 2.5,该实例位于负载均衡器后面,RDS 上有一个 PostgreSQL 数据库。我们使用slick-pg作为我们的数据库连接器。

我们所知道的

到目前为止,我们发现了一些事情。

关于 HTTP 请求

我们的日志和调试显示请求正在通过过滤器。此外,我们看到对于身份验证(我们为此使用Silhoutte),应用程序能够执行数据库查询以接收该请求的身份。但是,控制器操作将永远不会被调用。

后端正在响应HEAD请求。进一步的日志记录显示,似乎使用注入服务的控制器(我们为此使用谷歌的 guice)是那些不再调用方法的控制器。没有注入服务的控制器似乎工作正常。

关于 EC2 实例

不幸的是,我们无法从那个获得太多信息。我们正在使用 boxfuse,它为我们提供了一个不可变的和通过 ssh-able 基础设施。我们即将将此更改为基于 docker 的部署,并且可能很快会提供更多信息。不过,我们有 New Relic 设置来监控我们的服务器。我们在那里找不到任何可疑的东西。内存和 CPU 使用情况看起来不错。

尽管如此,这个设置还是在每次部署时为我们提供了一个新的 EC2 实例。即使在重新部署之后,问题至少在大多数情况下仍然存在。最终可以通过重新部署来解决这个问题。

更奇怪的是,我们可以在本地运行后端连接到 AWS 上的数据库,并且一切都可以正常工作。

所以我们很难说问题出在哪里。似乎数据库没有与任何 EC2 实例一起使用(直到它最终将与新实例一起使用),而是与我们的本地机器一起使用。

关于数据库

db 是此设置中唯一的有状态实体,因此我们认为问题应该与它有关。

由于我们有一个生产环境和一个登台环境,我们可以在后者不再工作时将生产数据库转储到登台中。我们发现这确实可以立即解决问题。不幸的是,我们无法从某种损坏的数据库中获取快照以将其转储到暂存环境中,看看这是否会立即破坏它。当后端不再响应时,我们有数据库的快照。当我们将其转储到暂存环境时,后端将立即停止响应。

根据 AWS 控制台,与数据库的连接数约为 20,这是正常的。

TL;博士

  • 对于某些端点,我们的后端最终开始表现得像一个黑洞
  • 请求未达到控制器操作
  • EC2 中的新实例可能会解决此问题,但不一定
  • 在本地使用相同的数据库,一切正常
  • 将工作数据库转储到其中可以解决问题
  • EC2 实例的 CPU 和内存使用率以及与数据库的连接数看起来完全正常
  • 当后端不再响应时,我们可以使用我们制作的数据库转储来重现该行为(请参阅更新 2)
  • 使用新的 slick 线程池设置,我们将在重新启动数据库后从 slick 获取 ThreadPoolExecutor 异常,然后重新启动我们的 ec2 实例。(见更新 3)

更新 1

回复marcospereira :

以这个为例ApplicationController.scala

index工作admin正常。不过,这taskchecker将显示出奇怪的行为。

更新 2

我们现在可以重现此问题!我们发现上次后端不再响应时我们进行了数据库转储。当我们将其转储到暂存数据库中时,后端将立即停止响应。

我们现在开始在我们的一个过滤器中记录线程数,Thread.getAllStackTraces.keySet.size发现有 50 到 60 个线程正在运行。

更新 3

正如@AxelFontaine建议的那样,我们为数据库启用了多可用区部署故障转移。我们通过故障转移重新启动了数据库。在重新启动之前、期间和之后,后端没有响应。

重新启动后,我们注意到与 db 的连接数保持为 0。此外,我们不再获得任何用于身份验证的日志(在我们这样做之前,身份验证步骤甚至可以发出 db 请求并获得响应)。

重启 EC2 实例后,我们现在得到

play.api.UnexpectedException: Unexpected exception[RejectedExecutionException: Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@76d6ac53 rejected from java.util.concurrent.ThreadPoolExecutor@6ea1d0ce[Running, pool size = 4, active threads = 4, queued tasks = 5, completed tasks = 157]]

(我们之前没有得到那些)

对于我们的请求以及需要访问数据库的后台作业。我们的光滑设置现在包括

按照这里的建议

更新 4

在我们得到更新 3 中描述的异常后,后端现在再次运行良好。我们没有为此做任何事情。这是后端第一次在没有我们参与的情况下从这种状态中恢复。

0 投票
0 回答
353 浏览

liquibase - 更新生产数据库:jhipster

我很难理解 Liquibase 如何与 jhipster 一起工作。我正在使用 Boxfuse 将 jar 文件部署到 AWS。现在,由于我的应用程序不断发展,我需要每周添加/删除列/表。

当我第一次部署它时,应用程序第一次运行良好,当数据库模式没有变化时它也运行良好,只有代码的变化。现在,我需要将列添加到数据库。我使用 mvn liquibase:update 命令和包含 master.xml 中相应更改的更改集。甚至更改也会应用于数据库。我确认了他们。

现在,当我使用更改部署更新的 jar 时,它会出错并且无法部署。此外,boxfuse 控制台没有显示任何特定错误。它只是说上传失败。

有人可以帮我弄这个吗?谢谢。

0 投票
1 回答
51 浏览

playframework - 如何使用非默认 VPC 创建 Boxfuse 环境

我在一家拥有 AWS 账户的公司工作,我们希望将所有 Play 应用程序部署在同一个 AWS 区域(比如 us-east-1)。该区域没有“默认”VPC,无论如何,我们更愿意将我们的应用程序部署在我们的 IT 部门已经设置的现有 VPC 中。如何从 Web 界面 ( https://console.cloudcaptain.sh ) 将 Boxfuse 设置为使用另一个 VPC,然后使用默认 VPC?如果这是不可能的,我们怎么能通过命令行来做到这一点?

0 投票
1 回答
27 浏览

cloudcaptain - 使用带有 Boxfuse 的内部 LB

是否可以将应用程序配置为使用内部 AWS LB(经典)?

我有一堆在自定义 LB 上运行的应用程序,但它们都是面向互联网的。我在 Boxfuse 控制台(LB 选择器下拉菜单)中找不到我新创建的内部 LB...

0 投票
1 回答
34 浏览

cloudcaptain - 在自托管解决方案上运行 boxfuse 图像

我刚刚找到了 Boxfuse。对于开发和运输应用程序来说,这是一个非常有趣的解决方案。有一点让我很困扰。我可以在使用 kvm 或类似工具的自托管解决方案上运行 boxfuse 图像吗?感谢您的帮助。

0 投票
1 回答
1583 浏览

spring-cloud - 在 ecs 中使用 Spring-Cloud-docker 通过 Cloud-Watch 处理日志记录的最佳实践

我现在尝试了几天来设置我的 docker-container 并运行一个 spring-cloud 应用程序

  • 使用“docker logs”登录 ec2 实例
  • 在 Cloud-Watch 的 logGroup 中显示我的日志记录条目

到目前为止我最好的结果:我在 Cloud-Watch 中获得了日志的前 20 行(Ascii-Art 和 Spring 版本中的 Spring-Brand),仅此而已。当时 EC2 实例上的 docker 显示与“docker logs”相同,但是我系统上的同一个 docker 像往常一样记录。但是,我的大多数尝试都没有显示通过“docker logs”或 Cloud-Watch 进行日志记录。但同样,我的控制台附加程序通过 log4j2 进行的应用程序日志运行与配置完全一样。

甚至我的本地 docker 与 app.jar 的日志也符合预期(不幸的是,Windows7、Docker 工具箱,没有 Linux 可能)。只有在 EC2 实例上,“泊坞窗日志”才会保持沉默。

配置:

  • 我有正确的泊坞窗图像吗?openjdk:8-jdk-alpine
  • 我的 Spring/AWS-Dependencies 是否正确(我们主要使用 SQS):spring-cloud-aws-messaging、spring-cloud-aws-autoconfigure、spring-boot-starter-web、aws-java-sdk-sts
  • 我是否需要我现在使用的这些日志记录依赖项? spring-boot-starter-log4j2 (um alle Brücken für CommonsLogging zu haben)
  • 我的应用程序中使用的日志记录(通过 slf4j 的 log4j2)可能是问题吗?
  • 我尝试了Console-Appender=>STDOUT=>awslogs方式。我尝试了(另外或作为交换)cloud-watch-appenders(com.boxfuse.cloudwatchlogs:cloudwatchlogs-java-appenderpro.apphub:aws-cloudwatch-log4j2)。使用这两个附加程序,我修复了一些初始配置错误,然后我看到...... Cloud-Watch 上什么都没有。
  • 在 ECS 任务中,我尝试了“ awslogs ”-配置以在 Cloudwatch 中获取 Docker-STDOUT(这就是导致上述前 20 行日志记录的原因)。我尝试使用“ json-file ”-config 在 EC2-instance 上使用“docker logs”查看某些内容。两者都没有导致预期的结果。

你能给我一些我可能错过的东西吗?

为什么只有日志的前 20 行(Spring-Header?)

为什么附加程序不显示希望的结果?我希望它像“Graylog”一样简单......在日志配置中选择了正确的附加配置,瞧,有日志条目。

您是否有一些教程链接,其中从 spring-cloud 到 Cloud-Watch 的日志记录是主题,并解释了所有必要的部分和步骤?

您是否有一些片段(Pom、task-json、其他提示)可以帮助我完成这项工作?

改变像 Boxfuse 这样的“一切就绪”的解决方案确实会更好吗?

十分感谢!

PS:我知道ELK-Stack等有解决方案,但我真的很想先尝试Cloud-Watch。

0 投票
1 回答
30 浏览

cloudcaptain - boxfuse 的默认配置参数

是否有可在 boxfuse.conf 中使用的配置 Boxfuse 参数的记录列表?主要是,当您在 Web 控制台中创建和配置应用程序时,我想通过 .conf 将该应用程序分配给具体项目,而不是 Boxfuse 在部署期间创建另一个应用程序,因为如果从其他地方推断它。

0 投票
0 回答
26 浏览

cloudcaptain - 不加密 AMI 的 Boxfuse 部署

是否可以在不加密图像的情况下将 Boxfuse 部署到 AWS?即使是最小的 Play Framework 融合应用程序(~90MB)也需要大约 5 分钟(而不是宣布的 ~50 秒)来加密,更不用说更大的项目了。出于这个原因,能够至少在部署频繁的环境(QA、测试等)中禁用加密会很有趣。Boxfuse 的某处有一条关于选择针对 AMI 签名优化的 AWS 区域的评论,但我没有运气。对于我的情况,它仍然很慢。

0 投票
2 回答
81 浏览

java - 有没有办法从 boxfuse 中提取我的源代码?

原谅一个非技术应用程序所有者可能是一个愚蠢的问题,一年前我与一位后端开发人员合作,对我的应用程序进行了一些修复,但没有直接从他那里得到他的代码(忘记了)。现在我正在与一位新的后端开发人员合作,我们需要该代码。我们使用 boxfuse 来推送更改,有没有办法从 boxfuse 获取代码,还是我们搞砸了?!

0 投票
1 回答
29 浏览

go - 如何在 boxfuse 图像(golang 应用程序)中包含配置文件?

我正在使用 golang 服务器,我想在融合图像中包含一些配置文件。但是,我找不到任何可以为我指明正确方向的文档。谢谢!