【发布时间】:2018-10-28 09:21:45
【问题描述】:
我使用 Cloud Shell 和 Google 应用引擎的编辑器创建了自己的 API。这是在测试中运行良好的代码的 sn-p:
app.get('/fetch_ticker', (req, res) => {
(async() => {
let pair = req.param('pair', "BTC/ETH");
let ex = req.param('exchange', "coinmarketcap");
let myArr = [];
let exchange = await new ccxt[ex]();
let tickers = await exchange.fetchTicker(pair);
myArr.push(tickers);
//Send req
res.status(200).send(myArr);
})()
});
现在,当我在“Gcloud app deploy”之后尝试并在生产中运行它时,其他获取请求工作正常,但是当“ex”等于“coinmarketcap”时,它只是不断加载并最终给出 500 错误.
更新:
这是日志:
2018-11-03 11:43:50 default[20181103t163752] ==== JS stack trace =========================================
2018-11-03 11:43:50 default[20181103t163752]
2018-11-03 11:43:50 default[20181103t163752] Security context: 0x3e6826325879 <JSObject>
2018-11-03 11:43:50 default[20181103t163752] 1: indexBy(aka indexBy) [/srv/node_modules/ccxt/js/base/functions/generic.js:~82] [pc=0x30a50d2a5374](this=0x32f
9351022d1 <undefined>,/* anonymous */=0x1e7ccf12dc59 <JSArray[37746]>,/* anonymous */=0x32f935144e51 <String[2]: id>,/* anonymous */=0x32f9351022d1 <undefined>)
2018-11-03 11:43:50 default[20181103t163752] 2: arguments adaptor frame: 2->3
2018-11-03 11:43:50 default[20181103t163752] 3: set_markets(aka setMarkets) [/srv/node_modules/ccxt/js/base/Exchange.js:613] ...
2018-11-03 11:43:50 default[20181103t163752]
2018-11-03 11:43:50 default[20181103t163752] FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
2018-11-03 11:43:50 default[20181103t163752] 1: node::Abort() [node]
我尝试使用 node --max_old_space_size=4096 app.js 增加内存,但错误仍然存在。
【问题讨论】:
-
在您的开发者控制台中,转到日志记录并按您的 App Engine 服务和版本进行过滤。你能找到返回 500 的请求吗?错误是什么?
-
它在日志中为我提供了一些信息:此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次加载。因此,与您的应用程序的典型请求相比,此请求可能需要更长的时间并使用更多的 CPU。
-
您应该在失败请求日志的负载中包含更多信息。在删除可能出现的任何私人/敏感信息后,您可以将整个请求日志粘贴到您的问题中。
-
我已经编辑并添加了日志。
标签: javascript node.js google-app-engine cryptocurrency google-cloud-shell