我的代码在 nodejs6 中成功运行。我只是想在nodejs8中部署它。
index.js 包含以下代码
// [START functions bgMCMA]
/**
* Background Cloud Function - Triggered by PubSub.
* @param {!Object} event The Cloud Functions event.
* @param {!Function} The callback function.
*/
exports.bgScrapeMCMA = (event, callback) => {
//Logic to avoid infinite loop on timeout
const eventAge = Date.now() - Date.parse(event.timestamp);
const eventMaxAge = 420000; //7Minutes as timeout is set as 504 seconds(9Minutes)
// Ignore events that are too old
if (eventAge > eventMaxAge) {
console.log(`INFINITE-LOOP-BREAK : Dropping context ${context} with age ${eventAge} ms.`);
callback(); // Don't forget to call the callback. Remember its either a callback() or promise
return;
}
// The Cloud Pub/Sub Message object.
const pubSubMessage = event.data;
const message = pubSubMessage.data ? Buffer.from(pubSubMessage.data, 'base64').toString() : 'NONE';
console.log('MCMA triggered time : ' + DateTime.getCurrentISTdt("yyyy-mmm-dd hh:mm:ss") + ' Message : ' + message);
MCMA.start().then( (resp) =>{
console.log('MCMA : Success : '+resp);
callback(); // Don't forget to call the callback. Remember its either a callback() or promise
}).catch( (e) =>{
console.error('MCMA : Error : '+e);
callback(); // Don't forget to call the callback. Remember its either a callback() or promise
});
};
// [END functions bgMCMA]
使用以下命令部署到 nodejs8
gcloud functions deploy bgScrapeMCMA --trigger-resource psTriggerbgScrapeMCMA --trigger-event google.pubsub.topic.publish --entry-point=bgScrapeMCMA --timeout=540s --runtime nodejs8
函数已成功部署。
我正在通过 pubsub 触发代码。从功能控制台,我将单击主题并在消息文本区域中发布类似“TEST”的消息。
期望是什么?
在检查日志时,它通常会显示消息“TEST”。所以,我可以理解功能已成功触发。
在 nodejs8 中部署后我看到了什么?
在我在 pubsub 中输入消息“TEST”后。在日志中,我看到的消息是“NONE”。所以我的理解是功能被触发了它没有收到我的信息。
函数执行大约 45 秒后。它崩溃并显示消息 textPayload:“错误:函数崩溃超出请求范围函数调用被中断。”。
当我重新运行时,这次它因为内存 textPayload 而崩溃:“错误:超出内存限制。函数调用被中断。”
由于第二次因为内存崩溃,目前使用的是256MB。所以我编辑了函数并将其增加到 512MB。第一个错误再次出现,“错误:函数崩溃超出请求范围函数调用被中断。”。
在这一点上,我怀疑我以前工作的程序,只是为了升级到 nodejs8。我删除了以前的工作功能并尝试使用新的节点版本进行部署。所以我回去重新部署 nodejs6 和 256MB 内存。当我执行它的功能时。
该功能的基本作用是抓取网站并更新 Firebase。经过的功能大约是 10s - 45s。
所以我基本上想知道两件事,GCP 中的 NodeJS8 发生了什么变化。
1. 来自 pubsub 的简单消息没有出现在日志中
const pubSubMessage = event.data;
const message = pubSubMessage.data ? Buffer.from(pubSubMessage.data, 'base64').toString() : 'NONE';
console.log('MCMA triggered time : ' + DateTime.getCurrentISTdt("yyyy-mmm-dd hh:mm:ss") + ' Message : ' + message);
- 消耗大量内存。256MB 的工作 nodejs6 甚至在 512MB 时都崩溃了。
我知道 nodejs8 处于测试阶段。最终它将来到GA。如何解决这个问题。