我们有一个奇怪的案例OutOfMemory(堆)。给定这种方法
private void processRemainingIds(final ITransaction tx) {
remainingIds.stream()//
.map(this::getInternalMessage)//
.filter(this::isMessageNeedsProcessing)//
.forEach(msg -> registerMessageAsMissing(msg, tx));
}
Run Code Online (Sandbox Code Playgroud)
如果remainingIds足够大,则此方法会相当稳定地填充堆。
getInternalMessage 将加载“正常”大小的数据模型结构(即,没有斑点/小块等,只有几十个字符串和数字)registerMessageAsMissing 内部调用同步方法(可能是相关的)getInternalMessage“同步”完全改变了内存行为,堆大小不再增加我希望上面的实现会创建很多内部消息,检查并在需要时对其进行处理,但随后丢弃每个对象并偶尔运行GC。但这不是我们所看到的,相反,我们得到了
OOM的标准问题,即 我熟悉的是“某些东西在固定住您的对象”。但是为什么要进行getInternalMessage同步更改呢?
我正在尝试使用 terraform 在 Cloudwatch 中设置和报警。我的警报基本上需要检查在 1 分钟的 2 个周期内网关中是否有超过 5% 的 5xx 错误。
我已经尝试了以下代码,但它不起作用:
resource "aws_cloudwatch_metric_alarm" "gateway_error_rate" {
alarm_name = "gateway-errors"
comparison_operator = "GreaterThanOrEqualToThreshold"
alarm_description = "Gateway error rate has exceeded 5%"
treat_missing_data = "notBreaching"
metric_name = "5XXError"
namespace = "AWS/ApiGateway"
period = 60
evaluation_periods = 2
threshold = 5
statistic = "Average"
unit = "Percent"
dimensions = {
ApiName = "my-api"
Stage = "dev"
}
}
Run Code Online (Sandbox Code Playgroud)
即使部署了警报,也不会显示数据。做一些测试时,我注意到该警报显然不接受单位“百分比”。
有没有人有一个例子terraform或cloudformation如何配置此类报警?
amazon-web-services aws-cloudformation amazon-cloudwatch terraform cloudwatch-alarms
我有一个模块,可以创建具有公共和私有子网的 VPC
module "vpc" {
count = var.vpc_enabled ? 1 : 0
source = "./vpc"
}
Run Code Online (Sandbox Code Playgroud)
作为该模块的输出,我正在提取私有子网
output "private_subnets" {
value = aws_subnet.private.*.id
}
Run Code Online (Sandbox Code Playgroud)
然后我想使用该子网列表作为另一个模块的输入:
module "eks" {
source = "./eks"
name = var.name
private_subnets = var.vpc_enabled ? module.vpc.private_subnets : var.private_subnets_id
}
Run Code Online (Sandbox Code Playgroud)
基本上我想要实现的是,用户可以选择是否要创建新的 VPC 或使用现有 VPC 的子网列表作为输入。
我现在遇到的问题是我在 terraform plan 中遇到以下错误:
on main.tf line 32, in module "eks":
32: private_subnets = var.vpc_enabled ? module.vpc.private_subnets : var.private_subnets_id
|----------------
| module.vpc is tuple with 1 element
This value does not have any …Run Code Online (Sandbox Code Playgroud) 我有两个列表,我想将列表 1 的每个元素与列表 2 的每个元素进行比较,并在列表 3 中获得结果,例如
List1 = {99,22,33}
list2 = {11,24,33}
Run Code Online (Sandbox Code Playgroud)
结果:
list3 = {1,-1,0}
Run Code Online (Sandbox Code Playgroud)
我如何最好使用流来做到这一点?
编码时使用java流显示错误
Optional.ofNullable(product.getStudents())
.orElseGet(Collections.emptyList())
.stream().map(x->x.getId)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
此代码显示以下错误 错误
不兼容的类型,必需的供应商> 但空列表被干扰到 List : 不存在 T 类型变量的实例,因此 List 符合供应商>
但是如果我替换Collections.emptyList()WITH Collections::emptyList
It 就完美了。
Collections.emptyList() 与 Collections::emptyList 有什么区别?