我对分段错误的理解是,它是一个尝试访问不允许访问的内存的进程.我尝试将内存增加到1024MB(我使用128MB,因为每次执行仅使用大约56MB),但这并没有改变任何东西.
我知道我不是唯一遇到此问题的人:https://forums.aws.amazon.com/thread.jspa?threadID=229397
有谁知道如何解决这个问题?
2016年4月25日更新
为清楚起见,我运行的代码是:
import { spawnSync } from 'child_process'; exports.handler = (event,context) => { process.env.PATH = `${process.env.PATH}:${process.env.LAMBDA_TASK_ROOT}`; const ffprobe = './ffprobe'; const bucket = event.Records[0].s3.bucket.name; const key = event.Records[0].s3.object.key; console.log(`bucket: ${bucket}`); console.log(`key: ${key}`); const url = 'http://my-clip-url.com'; // An s3 presigned url. if (!url) { throw new Error('Clip does not exist.'); } const command = `-show_format -show_streams -print_format json ${url}`; try { const child = spawnSync(ffprobe,command.split(' ')); console.log(`stdout: ${child.stdout.toString()}`) console.log(`stderr: ${child.stderr.toString()}`) console.log(`status: ${child.status.toString()}`) console.log(`signal: ${child.signal.toString()}`) } catch (exception) { console.log(`Process crashed! Error: ${exception}`); } };
其输出是:
START RequestId: 6d72847 Version: $LATEST 2016-04-25T19:32:26.154Z 6d72847 stdout: 2016-04-25T19:32:26.155Z 6d72847 stderr: 2016-04-25T19:32:26.155Z 6d72847 status: 0 2016-04-25T19:32:26.155Z 6d72847 signal: SIGSEGV END RequestId: 6d72847 REPORT RequestId: 6d72847 Duration: 4151.10 ms Billed Duration: 4200 ms Memory Size: 256 MB Max Memory Used: 84 MB
我使用无服务器框架来babelify和部署我的代码.
注意:我已尝试在EC2(http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html)上的ami-bff32ccc实例上运行此二进制文件并且它可以正常工作.所以它一定是我正在做的事情(我如何执行ffprobe).
解决方法
我想知道我是否应该发布以下内容作为评论或答案.我之所以这么想是因为我对你实际要问的内容感到有些困惑.在第一次阅读时,显然您希望克服错误,但您并没有帮助我们通过向我们展示您的代码来对其进行背景化.此外,在您发布的帖子中讨论的问题是相关的,但作者提出了一个更一般的问题:“如何调试问题”,我得到了答案:
回答:
Lambda日志在CloudWatch中可用.当您尝试访问不允许的内容时(如您所指出的那样)会导致SIGSEGV,这可能是因为内存被另一个进程锁定,有时因为您没有权限访问您正在访问的内容,或者可能访问某些内容,以便将某些内容设置为nil,稍后将其用作内存地址等.您可以在代码中添加日志语句,以调查函数中实际发生的情况,并在使用CloudWatch后读取此类日志:http://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html
结论:
您的问题无法解决,因为您没有完全解释问题,但至少,我指的是如何调查它:
如果您需要更多帮助,可以发布您的代码.