天道酬勤,学无止境

在 dynamodb 表上调用 lambda 函数时无法创建新的本机线程错误 - 如何避免?(Unable to create new native thread error when invoking lambda function on dynamodb table - how to avoid?)

问题

我有一个 lambda 函数,它查询一些 DynamoDB 表并返回其中的一些条目。 调用它几次,一切都很好,但我现在正在对我的后端进行压力测试,当我在短时间内一遍又一遍地调用这个函数时,我收到以下错误:

"errorMessage":"unable to create new native thread","errorType":"java.lang.OutOfMemoryError"

我正在使用 DynamoDB 的空间索引功能,错误消息似乎表明与空间索引查询有关的一行导致了问题。 这些是与地理查询有关的行:

GeoDataManagerConfiguration config = new GeoDataManagerConfiguration(ddb, "geo");

        GeoDataManager geoIndexManager = new GeoDataManager(config);

        GeoPoint centerPoint = new GeoPoint(request.latitude, request.longitude);

        QueryRadiusRequest queryRadiusRequest = new QueryRadiusRequest(centerPoint, request.radius);

        QueryRadiusResult queryRadiusResult = geoIndexManager.queryRadius(queryRadiusRequest);

具体来说,尽管以下行似乎是问题的根源:

QueryRadiusResult queryRadiusResult = geoIndexManager.queryRadius(queryRadiusRequest); 

到底是怎么回事? 为什么在重复调用函数时这一行会抛出这个错误? 从表面上看,dynamoDB 上的空间索引/查找似乎无法处理大量调用,这确实没有意义,当然,在构建它时,它是用来处理比例的。 是否有一些设置可以让我在 aws 中分配更多内存来避免这个问题?

回答1

使您的 GeoDataManagerConfiguration 静态并且不要为每个请求(在您的 lambda 处理程序中)创建它。 否则,您将为每个请求创建一个执行服务:https://github.com/awslabs/dynamodb-geo/blob/8fd3e7b408650a937735ffb6527516dba239a1db/src/com/amazonaws/geo/GeoDataManagerConfiguration.java#L164

回答2

请参阅 AWS Lambda 限制。

每次调用限制为 1024 个线程,每个区域最多 100 个调用。

如果您在单个函数中达到该限制,您可以在代码中设置一个低于该限制的硬限制,或者添加一个线程池和一个队列。

我之前编写了一个 Lambda 函数来读入配置文件并将测试数据打包到自身的其他副本中,以绕过这些限制。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何自动扩展Amazon DynamoDB的吞吐量?(How to auto scale Amazon DynamoDB throughput?)
    问题 Amazon DynamoDB不提供内置功能来基于动态负载自动调整吞吐量。 它提供API以增加或减少吞吐量。 客户按小时收取预配置读写吞吐量的费用。 有哪些不同的方法可以改变dynamodb的通量并获得节省成本的好处? 回答1 克里斯的答案是准确的答案。 只是为了补充使用DynamoDB的先前经验中的几点... DynamoDB的情况与EC2不同。 弹性计算服务具有Amazon直接作为Web服务支持的API,使您可以根据某些逻辑(例如,存在多少需求)来编程如何按比例放大或缩小。 您可以通过定义监视阈值并自动触发组中实例的创建或删除来对此进行编程。 数据服务器无法与触发器配合使用以调整其容量。 但是DynamoDB的容量非常灵活,可以像Chris所指出的那样受到控制。 提供此功能的API足以进行一次更改。 或从控制台进行等效的手动更改。 使用DynamoDB进行程序创建和更新操作的不同语言绑定在这里… http://docs.aws.amazon.com/cli/latest/reference/dynamodb/index.html 修改容量的重要操作在这里…… http://docs.aws.amazon.com/cli/latest/reference/dynamodb/update-table.html 因此
  • AWS - 想要将多个文件上传到 S3,并且只有当所有文件都上传时才会触发 lambda 函数(AWS - want to upload multiple files to S3 and only when all are uploaded trigger a lambda function)
    问题 我正在寻求有关设计此最佳方式的建议- 用例 我想将多个文件放入 S3。 成功保存所有文件后,我想触发一个 lambda 函数来做一些其他工作。 天真的方法 我处理这个问题的方法是在 Dynamo 中保存一条记录,其中包含一个唯一标识符和我将上传的记录总数以及应该存在于 S3 中的密钥。 一个基本的实现是采用我现有的 lambda 函数,该函数在我的 S3 存储桶写入时调用,并让它手动检查是否所有其他文件都已保存。 Lambda 函数会知道(查看 Dynamo 以确定我们要查找的内容)并查询 S3 以查看其他文件是否在其中。如果是,请使用 SNS 触发我的另一个 lambda 来执行其他工作。 编辑:另一种方法是让我将文件放在 S3 中的客户端程序负责直接调用另一个 lambda 函数,因为从技术上讲,它知道所有文件何时上传。 这种方法的问题是我不希望这是客户端程序的责任......我希望客户端程序不在乎。 一旦它上传了文件,它应该能够退出。 想法 我不认为这是一个好主意。 主要是因为 Lambda 函数应该是轻量级的,并且从 Lambda 函数内轮询数据库以获取所有上传文件的 S3 密钥,然后检查 S3 是否存在 - 每次这样做似乎是贫民窟并且非常重复。 什么是更好的方法? 我正在考虑使用 SWF 之类的东西,但不确定这对我的解决方案来说是否太过分了
  • AWS DynamoDB 流的钩子(Hooks for AWS DynamoDB streams)
    问题 AWS DynamoDB 提供有助于捕获表活动的流。 以我的理解,在梦中捕捉变化的流程是Stream ARN -> Shards -> shardIterator -> Records 。 为了让应用程序监视 Dynamo 表上的更改,它必须继续执行上述循环。 我想知道这个流程是否可以通过钩子来简化,这些钩子可以监视我的应用程序可以侦听的这些更改和触发器。 我知道有一个 AWS Lambda 集成可以执行上述循环和警报,但我想知道应用程序是否可以监听 AWS lambda 警报 npm 包 dynamodb-stream 确实可以更轻松地使用更改,但是如果需要尽快捕获所有表活动,轮询机制似乎并不是最有效的 回答1 我不确定该 npm 包的用途是什么,您可以将事件触发的 Lambda 与 DynamoDB Streams 一起使用。 基本上,Lambda 服务(不是您的个人羔羊)将轮询 Stream 中的更改并在找到它们时执行您的羔羊。 比使用某种可笑的基于计时器的废话要干净得多。 这是关于它的文档。 Amazon DynamoDB 与 AWS Lambda 集成,因此您可以创建触发器——自动响应 DynamoDB Streams 中的事件的代码段。 使用触发器,您可以构建对 DynamoDB 表中的数据修改做出反应的应用程序。 如果您在表上启用 DynamoDB 流
  • 是否可以跨账户访问 AWS DynamoDB 流?(It is possible to Access AWS DynamoDB streams accross accounts?)
    问题 我的公司使用多账户系统管理 AWS。 我在账户 A 中有一个 lambda 函数,在账户 B 中有一个启用了流的 DynamoDB 表。我希望流事件触发我的函数。 当我运行时: aws lambda 创建事件源映射 --event-source-arn arn:aws:dynamodb:us-east-1:101010101:table/table/stream/2016-08-09T23:00:46.852 --function-name Lambda-qa --enabled --batch-size 10 --starting-position TRIM_HORIZON 我收到以下错误:调用 CreateEventSourceMapping 操作时发生错误 (InvalidParameterValueException):角色和事件源必须与云函数在同一帐户中 看起来 Lambda 函数和 DynamoDB 流必须在同一个帐户中。 但是可以通过其他方式从 accountB 读取 accountA 中的 DynamoDB 流吗? 重定向、SNS、SQS、S3 或自定义应用程序。 回答1 抱歉不行。 来自 AWS 文档: “重要的 您必须在创建 Lambda 函数的同一区域中创建 DynamoDB 表。 本教程假设美国东部(弗吉尼亚北部)区域。 此外,表和 Lambda
  • 增加 DynamoDB 中的分片数量以并行启动更多 lambda(Increase number of shards in DynamoDB to spin up more lambdas in parallel)
    问题 我目前正在使用DynamoDB流来处理具有 lambda 函数的更改的集合值,但是,目前,我仅并行运行两个 lambda 实例,这不足以处理所有传入数据,而且 lambda 函数只是排队。 从aws文档中,我可以看到可以并行运行的 lambda 的数量与 DynamoDB 的分片数量成正比: 如果您创建一个 Lambda 函数来处理来自基于流的服务(Amazon Kinesis Streams 或 DynamoDB 流)的事件,则每个流的分片数是并发单位。 如果您的流有 100 个活动分片,则将有 100 个 Lambda 函数同时运行。 然后,每个 Lambda 函数按照事件到达的顺序处理分片上的事件。 所以我的问题是,如何增加 DynamoDB 的分片数量? 甚至有可能吗? 我在设置中找不到如何设置它。 回答1 不,无法手动控制 DDB UpdateStream 中的分片数量。 DDB 通过创建尽可能多的分片来匹配传入的更新速率来自动为您处理。 理想情况下,发生在 DDB 表上的更新应该流经某个分片(发生在同一条记录上的更新将始终转到同一分片,这意味着它们根据您的 hashKey 进行分区)。 您的更新流也是按时间顺序排列的,因此对同一记录的更新最终(或说排队)在同一分片中,以便最终处理器按它们发生的顺序处理它们。 每个分片都有自己的进出数据吞吐能力
  • DynamoDB 导致 Lambda 超时(DynamoDB causing Lambda timeout)
    问题 我遇到了一个问题,即 Lambda 函数偶尔会超时,除了函数超时的通知之外,没有任何错误消息。 为了找到问题的根源,我在整个函数的各个点添加了日志记录,并确定一切正常,直到第一个 getItem() 请求从 DynamoDB 读取数据。 读取似乎需要超过 3.00 秒的超时时间。 当然,我检查了我的 DynamoDB 表,看看是否有任何限制读取或错误。 DynamoDB 的指标没有显示任何限制或错误,读取时间最多保持在两位数毫秒。 很明显,有什么地方出了问题,或者一路上掉了下来。 我该如何解决这个问题或至少抓住它并重试读取? 这是一个面向 Web API 的读取功能,因此响应时间至关重要。 因此,增加超时不会解决问题。 dynamodb.getItem({ "TableName": "tablename", "Key": { "keyname": { "S": "keyvalue" } }, "AttributesToGet": [ "attributeA", "attributeB" ] }, function(err, data) { if(err){ context.done(err); } else { if("Item" in data){ nextFunction(event, context); } else { context.done("Invalid
  • 无法从我的 vpc 配置的 lambda 函数连接 dynamo Db(Cant connect dynamo Db from my vpc configured lambda function)
    问题 我需要从单个 lambda 函数连接弹性缓存和 dynamo db。 我的代码是 exports.handler = (event, context, callback) => { var redis = require("redis"); var client; function connectRedisClient() { client = redis.createClient(6379, "dgdfgdfgdfgdfgdfgfd.use1.cache.amazonaws.com", { no_ready_check: true }); } connectRedisClient(); client.set('sampleKey', 'Hello World', redis.print); console.log("set worked"); client.quit(); var AWS = require("aws-sdk"); var docClient = new AWS.DynamoDB.DocumentClient(); var table = "dummy"; var year = 2015; var title = "The Big New Movie"; var params = { TableName: table, Item: { "userid":
  • 在不使用cron的情况下在AWS中运行计划的任务(run scheduled task in AWS without cron)
    问题 目前,我在亚马逊中有一台服务器,我将所有cronjobs都放在其中。 我想消除这一单点故障,并将所有任务公开为Web服务。 我想将VPC ELB背后的服务公开给一些服务器,这些服务器将在调用时运行任务。 Amazon(AWS)是否提供某些服务,可以按计划的时间间隔运行重复发生的工作(真的称为Web服务)? 我真的很想能够在时间/日期规范方面保留cron功能,但将驱动程序的HA(在正确的时间调用端点的东西)分配给AWS。 我喜欢SQS如何提供Web端点,但是据我所知您无法安排它们。 SWF似乎也不适合。 回答1 AWS在其2015 re:Invent会议上宣布了对Lambda中计划功能的支持。 使用此功能,用户可以使用类似cron的语法按计划执行Lambda函数。 Lambda文档显示了一个使用Python执行预定事件的示例。 当前,计划的lambda可以运行的最低分辨率为1分钟(与cron相同,但不如systemd计时器细粒度)。 Lambder项目有助于简化Lambda上计划功能的使用。 λGordon的cron示例可能具有用于部署计划的lambda函数的最简单接口。 原始答案,已保存供后代使用。 正如Eric Hammond等人所述,没有用于计划任务的本机AWS服务。 如其他答案中所述,只有解决方法和一半解决方案。 回顾一下当前选项: 如Eric Hammond所述
  • 如何使用 lambda 函数处理 SQS 队列(不是通过计划事件)?(How to process SQS queue with lambda function (not via scheduled events)?)
    问题 这是我正在努力工作的简化方案: http 请求 --> (Gateway API + lambda A) --> SQS --> (lambda B ?????) --> DynamoDB 所以它应该如图所示工作:来自许多 http 请求的数据(例如每秒最多 500 个)被我的 lambda 函数 A 放入 SQS 队列。然后另一个函数 B 处理队列:读取多达 10 个项目(定期)并使用 BatchWriteItem 将它们写入 DynamoDB。 问题是我不知道如何触发第二个 lambda 函数。 它应该被频繁调用,每秒多次(或至少每秒一次),因为我需要队列中的所有数据尽快进入 DynamoDB(这就是为什么通过此处描述的计划事件调用 lambda 函数 B 不是一个选项) 为什么我不想直接写入 DynamoDB,没有 SQS? 这对我来说完全避免使用 SQS 会很棒。 我试图用 SQS 解决的问题是 DynamoDB 节流。 甚至不是限制本身,而是使用 AWS SDK 将数据写入 DynamoDB 时的处理方式:当一条条记录写入并受到限制时,AWS SDK 会默默地重试写入,导致从 http 客户端的角度增加请求处理时间看法。 所以我想暂时将数据存储在队列中,将响应“200 OK”发送回客户端,然后通过单独的函数处理队列,使用一个 DynamoDB 的
  • 鉴于所有调用都是异步的,您如何在 lambda 中构建顺序 AWS 服务调用?(How do you structure sequential AWS service calls within lambda given all the calls are asynchronous?)
    问题 我来自 Java 背景,所以对 Lambda 所需的 Javascript 约定有点陌生。 我有一个 lambda 函数,它旨在根据上一个任务的结果以特定顺序执行多个 AWS 任务。 鉴于每个任务异步报告其结果,我想知道是否以正确的方式确保它们都以正确的顺序发生,并且一个操作的结果可用于调用下一个函数。 似乎我必须在先前函数的回调中调用每个函数,但这似乎会进行某种深度嵌套并想知道这是否是正确的方法。 例如,这些函数中的一个需要 DynamoDB getItem,然后调用 SNS 以获取端点,然后调用 SNS 以发送消息,然后调用 DynamoDB 写入。 在 lambda javascript 中这样做的正确方法是什么,考虑到所有的异步性? 回答1 我喜欢@jonathanbaraldi 的答案,但我认为如果您使用 Promise 管理控制流会更好。 Q 库有一些方便的函数,比如nbind ,它们有助于将节点风格的回调 API 像 aws-sdk 转换为nbind 。 因此,在本例中,我将发送一封电子邮件,然后一旦收到电子邮件回复,我将发送第二封电子邮件。 这基本上就是所要求的,按顺序调用多个服务。 我正在使用 promise 的then方法以垂直可读的方式管理它。 还使用catch来处理错误。 我认为它只是简单地嵌套回调函数读起来要好得多。 var Q = require(
  • 用C ++ 11接口包装C回调的最佳方法是什么?(What's the best way to wrap a C callback with a C++11 interface?)
    问题 假设这是一个要包装的C函数: void foo(int(__stdcall *callback)()); C函数指针回调的两个主要陷阱是: 无法存储绑定表达式无法存储捕获的lambda 我想知道包装此类功能的最佳方法。 第一个对成员函数回调特别有用,第二个对使用周围变量的内联定义特别有用,但这些不是唯一的用法。 这些特定的函数指针的另一个属性是,它们需要使用__stdcall调用约定。 据我所知,这完全消除了lambdas的选择,否则就有点麻烦了。 我也想至少允许__cdecl 。 这是我能想到的最好的方法,而不会开始依赖于函数指针所没有的支持。 它通常在标题中。 以下是有关Coliru的以下示例。 #include <functional> //C function in another header I have no control over extern "C" void foo(int(__stdcall *callback)()) { callback(); } namespace detail { std::function<int()> callback; //pretend extern and defined in cpp //compatible with the API, but passes work to above variable extern
  • 我可以限制 AWS Lambda 的并发调用吗?(Can I limit concurrent invocations of an AWS Lambda?)
    问题 我有一个由 PUT 触发到 S3 存储桶的 Lambda 函数。 我想限制这个 Lambda 函数,以便它一次只运行一个实例——我不希望两个实例同时运行。 我已经浏览了 Lambda 配置和文档,但我看不到任何明显的东西。 我可以编写自己的锁定系统,但如果这已经是一个已解决的问题,那就太好了。 如何限制 Lambda 的并发调用次数? 回答1 AWS Lambda 现在支持对单个函数的并发限制:https://aws.amazon.com/about-aws/whats-new/2017/11/set-concurrency-limits-on-individual-aws-lambda-functions/ 回答2 我建议您使用 Kinesis Streams(或者DynamoDB + DynamoDB Streams ,它们基本上具有相同的行为)。 您可以将Kinesis Streams视为queue 。 好的部分是您可以使用Kinesis Stream作为您的Lambda函数的触发器。 因此,插入此队列的任何内容都将按顺序自动传递给您的函数。 因此,您将能够一个接一个地处理这些S3 事件,一个接一个执行 Lambda (一次一个实例)。 为此,您需要创建一个Lambda函数,其简单目的是获取S3 事件并将它们放入Kinesis Stream 中。 然后
  • AWS的Serverless(Lambda)实践
    (一)Lambda功能介绍 AWS Step Functions 将多个AWS服务协调为无服务器工作流,以便可以快速构建和更新应用程序。使用Step Functions,可以设计和运行将AWS Lambda 和 Amazon ECS等服务整合到功能丰富的应用程序中的工作流。工作流由一系列步骤组成,一个步骤的输出充当下一个步骤的输入。 使用Step Functions,应用程序开发更简单、更直观,因为它将工作流转换为易于理解、易于向其他人说明且易于更改的状态机示意图。可以监控执行的每个步骤,这意味着可以快速识别并解决问题。 Step Functions可以自动触发和跟踪各个步骤,并在出现错误时重试,因此的应用程序能够按照预期顺序执行。 (二)demo实践 为了方便大家理解AWS Step Functions,以下我们将通过一个实际案例的动手操作,来帮忙大家理解AWS Step Functions,以及AWS SNS/AWS Dynamodb等服务。测试Demo架构如下: 2.1 AWS Step Function 状态机的工作流程 2.1.1工作流如图所示:2.1.2工作流描述:1)调用 Input Lottery Winners 函数,传入 num_of_winners,进入第二步。2)Random Select Winners 根据 Input Lottery Winners
  • 无服务器的 MoonMail Lambda 架构(MoonMail Lambda architecture with Serverless)
    问题 我一直在研究这个项目,因为让整个系统成为一组 Lambda 函数的想法似乎很有吸引力。 事实上,几年前我编写了一些与 MoonMail 几乎相同的软件,并且由于某些规格发生了变化,因此需要进行更新。 我正在评估将我的软件移植到 Lambda 或者只是调整它以使用 MoonMail。 我有以下问题: 在我使用 Serverless 的测试中,我注意到当我更改资源名称(如 DynamoDb 表的名称)并重新部署时,没有警告并且旧表及其内容被破坏。 我认为像配置文件中的额外字符这样的简单错误导致数据库中的所有数据被删除是非常危险的。 您如何处理此类问题? 关于通过 SES 发送电子邮件。 当您达到特定帐户的发送限制时,您如何处理限制? 你做指数退避吗? 我似乎无法在代码库中找到它。 如果您能指出我在 repo 中发生这种情况的一般区域,我将不胜感激。 回答1 MoonMail 的表名存储在 s-templates.json 中。 这个文件很少被触及,因此团队还没有遇到这个问题,但确实危险仍然存在,我会向 AWS 团队询问如何通过简单地在 CF 中重命名来避免删除表。 它会重试使用 Cloud Watch 调用发送限制案例(如果我错了,MM 团队会纠正我,但 99% 确定我没有)。 回答2 您可以在创建 DynamoDB 表时设置DeletionPolicy
  • 如何在 AWS Lambda 中获取 HTTP 方法?(How to get the HTTP method in AWS Lambda?)
    问题 在 AWS Lambda 代码中,如何获取来自 AWS Gateway API 的 HTTP 请求的 HTTP 方法(例如 GET、POST...)? 我从文档中了解到context.httpMethod是解决方案。 但是,我无法让它发挥作用。 例如,当我尝试添加以下 3 行时: if (context.httpMethod) { console.log('HTTP method:', context.httpMethod) } 进入“microservice-http-endpoint”蓝图的AWS示例代码如下: exports.handler = function(event, context) { if (context.httpMethod) { console.log('HTTP method:', context.httpMethod) } console.log('Received event:', JSON.stringify(event, null, 2)); // For clarity, I have removed the remaining part of the sample // provided by AWS, which works well, for instance when triggered // with Postman
  • 如何在Java中创建内存泄漏?(How can I create a memory leak in Java?)
    问题 我刚刚接受采访,并被要求使用Java造成内存泄漏。 不用说,我对如何开始创建它一无所知。 一个例子是什么? 回答1 这是在纯Java中创建真正的内存泄漏(运行代码无法访问但仍存储在内存中的对象)的好方法: 该应用程序将创建一个长期运行的线程(或使用线程池更快地泄漏)。 线程通过(可选地,自定义) ClassLoader 。 该类分配大量内存(例如new byte[1000000] ),在静态字段中存储对它的强引用,然后在ThreadLocal存储对自身的引用。 分配额外的内存是可选的(泄漏类实例就足够了),但是它将使泄漏工作快得多。 该应用程序清除对自定义类或从其加载的ClassLoader所有引用。 重复。 由于在Oracle的JDK中实现ThreadLocal的方式,这会导致内存泄漏: 每个Thread都有一个私有字段threadLocals ,它实际上存储线程本地值。 此映射中的每个键都是对ThreadLocal对象的弱引用,因此在该ThreadLocal对象被垃圾回收之后,其条目将从映射中删除。 但是每个值都是一个强引用,因此,当一个值(直接或间接)指向作为其键的ThreadLocal对象时,只要线程存在,该对象就不会被垃圾回收或从映射中删除。 在此示例中,强引用链如下所示: Thread对象→ threadLocals映射→示例类的实例→示例类
  • java.lang.OutOfMemoryError:无法创建新的本机线程(java.lang.OutOfMemoryError: unable to create new native thread)
    问题 我看到这样的评论 我见过这个问题的一个地方是,如果您继续创建线程,而不是直接在线程对象上调用run(),而不是调用start()。 这将导致线程对象不被取消引用...因此,一段时间后,出现无法创建新的本机线程的消息 在Sun Java论坛上 在我的应用程序中,最初我们打算使用线程,但是后来,我们决定不再需要线程,因此我们只调用run()而不是start()。 我们是否需要为新的threadClass(..)做手动GC? 我的tomcat启动设置 -Xms1024m -Xmx1024m -XX:MaxPermSize=450m 回答1 为什么首先创建一个Thread ? 您的代码应改为实现Runnable接口。 然后,当您决定要在线程中运行它时,可以简单地实例化一个以Runnable作为参数的Thread ,并在Thread对象上调用start() 。 相反,如果您只想在当前线程中运行它,则只需在Runnable对象上调用run()即可。 这有几个优点: 您不涉及任何Thread对象,只要您不关心单独的线程您的代码包装在一个概念上更Runnable中:您不是在编写某种特殊的Thread,对吗? 您只需编写一些可以执行/运行的代码。 您可以轻松地使用Executor进一步简化决策 最后但并非最不重要的一点是,您可以避免在是否创建本机线程资源方面造成任何潜在的混淆。 回答2
  • Visual C++ 新增功能(2003 - 2015)
    本页面包括从 Visual Studio 2003 到 Visual Studio 2015 的所有 Visual C++ 版本的“新增功能”页。 提供这些信息的目的是方便用户从早期版本的 Visual Studio 进行升级。 Visual Studio 2015 中 C++ 的新增功能 在 Visual Studio 2015 及更高版本中,对编译器符合性的持续改进有时会改变编译器理解现有源代码的方式。 发生这种情况时,可能会在生成过程中遇到新的或不同的错误,甚至以前生成且似乎运行正常的代码也可能出现行为差异。 幸运的是,这些差异对大部分源代码没有影响或影响极小,而且需要更改源代码或进行其他更改以解决这些差异时,修补程序通常小型且简单。 我们列出了以前可接受、现在可能需要更改的许多源代码示例(之前)及其修补程序(之后)。 虽然这些差异可能会影响源代码或其他生成项目,但其不会影响 Visual C++ 版本更新之间的二进制文件兼容性。 重大更改是严重性较高的更改,可能会影响二进制文件兼容性,但此类二进制文件兼容性中断问题仅发生在 Visual C++ 的主版本之间。 例如,在 Visual C ++ 2013 和 Visual C ++ 2015 之间。 有关 Visual C++ 2013 和 Visual C++ 2015 之间的重大更改的详细信息,请参阅 Visual C+
  • AWS Lambda“在完成请求之前退出流程”(AWS Lambda “Process exited before completing request”)
    问题 我正在尝试调用DynamoDB客户端方法,并从DynamoDB表中获取一项。 我正在使用AWS Lambda 。 但是,我不断收到消息: “在完成请求之前,进程已退出。” 我增加了超时时间只是为了确保,但是处理时间少于超时时间。 有什么建议吗? console.log('Loading event'); var AWS = require('aws-sdk'); var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'}); exports.handler = function(event, context) { dynamodb.listTables(function(err, data) { }); var params = { "TableName": "User", "Key": {"User Id" : {"S":event.objectId} }, "AttributesToGet" : ["First Name","Last Name", "Latitude", "Longitude"], "ConsistentRead" : true } dynamodb.getItem(params, function(response,result) { response.on('data', function
  • AWS Lambda:如何向 Dynamodb 中的 NS 集添加数字(AWS Lambda: How to Add Numbers to a NS Set in Dynamodb)
    问题 问题 我尝试了几种方法,但一直无法找到如何将数字添加到 NS 集。 这一切都在 lambda 函数中运行。 我想要完成的事情 我正在创建一个 dynamodb 表,其中十六进制中的不同颜色与一组 ID 对齐。 我正在优化表以进行快速读取并避免重复,这就是为什么我想为每个十六进制维护一组 ID。 我如何向表中添加项目: let doc = require('dynamodb-doc'); let dynamo = new doc.DynamoDB(); var object = { 'TableName': 'Hex', 'Item': { 'hex': '#FEFEFE', 'ids': { 'NS': [2,3,4] } } } dynamo.putItem(object, callback); 这导致 然后我尝试向集合中添加更多 id 使用 Dynamodb 更新项目文档标准 var params = { "TableName" : "Hex", "Key": { "hex": "#FEFEFE" }, "UpdateExpression" : "ADD #oldIds :newIds", "ExpressionAttributeNames" : { "#oldIds" : "ids" }, "ExpressionAttributeValues": { ":newIds"