小编Ron*_*het的帖子

为什么传递给 winston 的字符串会保存在内存中、泄漏并最终使 node.js 进程崩溃?

我正在检查由node-heapdump @0.3.14创建的堆快照,该快照在内核为 4.14.123-86.109.amzn1.x86_64 的 Amazon Linux 中的 Node.js 10.16.0 上运行。堆快照是 1GB,好消息是,字符串明显消耗了其中的大部分,使用了 750MB 的浅层和保留大小。

大多数这些字符串都必须由 winston(winston@3.2.1、winston-transport@4.3.0、winston-logsene@2.0.7)记录,日志级别 ( silly) 低于我的应用程序的最低级别 ( debug)。所以,每秒几十次,

  • 我建立了一个日志字符串。
  • 我将它传递给winston.loglogLevel silly
  • 没有日志发生(正如预期的那样,silly< debug)。

预期:字符串被 GC 处理,生活还在继续。

实际:字符串在内存中累积,未 GC,节点 OOM 为最大堆大小 (1.4GB)。


我正弦确实漏了。我所描述的不是两个普通 GC 之间的名义操作,因为查看快照中字符串的内容,我看到了很多变化,就我的应用而言,这些变化只能来自几个小时的运行。

此外,devtools有时会报告大量的这些字符串大小(23MB的字符串,实际上是1KB),和家丁树是堆积如山,与> 18000级水平的next内部对象的方法messagechunk(见下图)。

所以,我的两个问题是:

  1. 为什么 winston 将这些字符串保存在内存中?我有一个想法:也许 winston 将消息保存在队列/缓冲区中,因为级别太低而不会记录,并且从不刷新队列?
  2. 这个堆快照中发生了什么?我的 1KB 小字符串怎么会有 23MB 的浅/保留大小?!这是怎么回事在这个疯狂的家臣树/谁是这些任何想法next/ message/chunk对象属于哪一种? …

javascript memory-leaks node.js google-chrome-devtools winston

10
推荐指数
1
解决办法
761
查看次数

$ in/$或查询可以使用索引吗?

我正在使用CouchDB 2.0实例上的Mango查询,通过梦幻般的pouchdb-find.

有几次,我得到了可怕的no matching index found, create an index to optimize query time,即使我警告使用索引字段.

刚才我在选择"type": {"$in": ["a", "b"]}或等效时得到它"$or": [{"type": "a"}, {"type": "b"}],即使索引type存在.

谷歌搜索(cloudant查询文档,pouchdb-find文档,SO问题)没有帮助,在后者@nlawson说有些谓词($ne在上述问题,但也许我$in/ $or落入同一个篮子?)"目前不使用任何索引".

  • 如果我确实在同一条船上,那意味着什么?是否不可能使用某些谓词对查询使用索引限制芒果后端或pouchdb?
  • 我做错了什么/是否有一个索引解决方法来避免这种情况?
    • 更一般地说,是否有我可以阅读的文档,以深入了解索引的工作方式以及如何对其进行故障排除?

谢谢!

couchdb cloudant pouchdb couchdb-mango

6
推荐指数
1
解决办法
1489
查看次数

为什么从未填充 AWS.Lambda.invoke `error` 回调参数?

我正在尝试从外部 node.js 应用程序(即不在 AWS 上)调用 lambda 函数。我使用了 AWS 文档中的代码示例,它适用于名义案例。但是,在出现错误的情况下,我的调用函数永远不会正确处理它。

我的调用代码如下:

    // AWS.config before
    
    var pullParams = {
        FunctionName : 'myFunctionName',
        InvocationType : 'RequestResponse',
        LogType : 'None',
        Payload : JSON.stringify({
            "myParam" : params
        })
    };

    var lambda = new AWS.Lambda();

    lambda.invoke(pullParams, function(error, data) {
        console.log("error value: " + error);
        if (error) {
            console.log("Error invoking AWS " + error);
            // process error
        } else {
            // process payload
        }
     });
Run Code Online (Sandbox Code Playgroud)

在我的 lambda 函数中,如果没有提供参数,我会引发错误并提供错误消息

exports.handler = (event, context, callback) => {

    var params …
Run Code Online (Sandbox Code Playgroud)

javascript lambda amazon-web-services node.js

6
推荐指数
1
解决办法
4098
查看次数

为什么 VSCode 的“转到定义”在我使用 Webpack 别名的项目中失败?

这是vscode 问题 #16320的后续,vscode dev Matt Bierner 建议我在这里问。


VS Code 的最新版本...

  1. ...具有转到定义功能,通过按下F12符号触发...
  2. ... 并且还支持(通过jsconfig.json配置)webpack 别名,这是一个 webpack 特性,为更友好的导入启用导入行的前缀(请参阅vscode 文档以获取 Webpack 别名)。例如,别名/src/apito*会让我输入import foo from */users而不是import foo from ../../../../src/api/users.

但在某些用例中,它们一起失败。我为我的用例构建了一个最小的损坏测试项目(zip,3kB)。任何人都可以看看它,看看我是否做错了什么,或者它看起来像一个错误吗?

解压缩 zip 并查看README.md:路径自动完成有效,但不能“查看”或“转到定义”。

  • 浏览 js 文件以检查我并没有要求您运行任何邪恶的东西。
  • npm install && npm run build && node dist/index.js ? install & build 都成功了,说明 Webpack 很开心。运行日志[1, 2, 3]
  • 现在,运行code /path/to/project并打开src/index.js On …

javascript webpack visual-studio-code

6
推荐指数
2
解决办法
3488
查看次数

oauth2client/appengine.py使用webapp2/python27/wsgi返回"InvalidResponseError:标头值必须是str,得到'unicode'"

事先,我的问题类似于App Engine上的金字塔问题"InvalidResponseError:标题值必须是str,得到'unicode',以及几个google-api-python-client错误,但在我的情况下没有任何帮助.而且,我没有回答问题#254(它本身看起来类似于#111,所以我在这里尝试.

在本地GAE上,下面的简单示例(此示例的简化&python27-ified版本)返回InvalidResponseError: header values must be str, got 'unicode',但我的代码没有执行任何unicode标头设置.更准确地说,我期待结果Hello,而我有:

Internal Server Error
    The server has either erred or is incapable of performing the requested operation.
    Traceback (most recent call last):
      File "/home/ronj/.gae/lib/webapp2-2.5.2/webapp2.py", line 1546, in __call__
        return response(environ, start_response)
      File "/home/ronj/.gae/lib/webob_0_9/webob/__init__.py", line 2000, in __call__
        start_response(self.status, self.headerlist)
      File "/home/ronj/.gae/google/appengine/runtime/wsgi.py", line 156, in _StartResponse
        (_GetTypeName(value), value, name))
    InvalidResponseError: header values must be …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine oauth-2.0

5
推荐指数
1
解决办法
2530
查看次数

如何在GAE cron作业中执行OAuth操作?

这篇文章是如何在GAE任务队列中执行OAuth要求操作的后续内容.正如bossylobster在这篇文章中所建议的,我确实尝试user_id在我的脚本中进行硬编码,但是cron任务总是失败:

  • 我可以看到它在日志中被触发......

    2013-05-31 14:20:00.879 /update 302 5ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
    0.1.0.1 - - [31/May/2013:11:20:00 -0700] "GET /update HTTP/1.1" 302 385 - "AppEngine-Google; (+http://code.google.com/appengine)" "myapp.appspot.com" ms=6 cpu_ms=0 cpm_usd=0.000043 queue_name=__cron task_name=... app_engine_release=1.8.0 instance=...
    
    Run Code Online (Sandbox Code Playgroud)
  • ...但是,它总是失败(在AppEngine的Cron Jobs部分显示为红色"失败"),它应该运行的任务队列永远不会弹出任务队列部分.

我不明白的是,如果我/update手动打开,我有下面的登录提示.cron如何绕过那个?我该如何调试正在进行的操作?

GAE登录提示

谢谢您的帮助.

在@dlebech答案编辑/后随:问题添加后仍继续login: admin行有关urlapp.yaml.在本地(通过以管理员身份登录并访问您的浏览器中的处理程序的URL,安全URL for Cron所述)一切顺利,但一旦部署,我的应用程序永远不会超过OAuth2装饰器:

  • 有几个调试print语句......

    import webapp2
    ...
    
    YOUTUBE_RW_SCOPE = "https://www.googleapis.com/auth/youtube"
    YOUTUBE_API_SERVICE_NAME = "youtube"
    YOUTUBE_API_VERSION = …
    Run Code Online (Sandbox Code Playgroud)

python cron google-app-engine google-api google-api-python-client

5
推荐指数
1
解决办法
1447
查看次数

如何避免在离线GAE cron任务中"无法检索访问令牌:{"错误":"invalid_grant"}'?

这篇文章是如何在GAE/Python上进行'access_type = offline'/仅服务器OAuth2操作的后续内容.http = credentials.authorize(httplib2.Http())测试时该部件不再失败,但似乎它仍然由GAE的cron运行,它无法刷新我的access_token:

  1. 我可以通过电话手动完成我的工作/fetch,比如说在11:45.
  2. 立即安排/cronfetch在11:55工作,然后没有任何access_token问题.
  3. 但是,我今天早上醒来看到同样的 /cronfetch任务(除了时间,即我的非测试日常任务的01:00时)失败了:

    I 2013-06-10 05:53:51.324 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
    I 2013-06-10 05:53:51.325 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
    I 2013-06-10 05:53:51.327 URL being requested: https://www.googleapis.com/youtube/v3/playlists?alt=json&part=snippet%2Cstatus
    I 2013-06-10 05:53:51.397 Refreshing due to a 401
    I 2013-06-10 05:53:51.420 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
    I 2013-06-10 05:53:51.421 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
    I 2013-06-10 05:53:51.421 Refreshing access_token
    I 2013-06-10 05:53:51.458 Failed …
    Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-api oauth-2.0 google-api-python-client

5
推荐指数
1
解决办法
8143
查看次数

使用React`context`来访问无Flux应用程序中的模型mutators是否合理?

我正在开始一个新的React应用程序,并且看到生态系统中的所有新闻,我想慢慢地实际考虑我的选择,从React/Webpack/Babel开始,并引入更多.

这些选择中的第一个是否使用Flux(更确切地说,Redux,它看起来很棒并且似乎赢得了助威战争).我就是这样的地方:

  1. 我了解Redux的好处,由Dan Abramov总结为SO.它们看起来很棒,但我宁愿一步一步地介绍一下.
  2. 在简单的React中,父级→子级通信使用道具完成,子级→父级通信使用回调.请参阅文档/组件之间的通信,或SO/Child到React(JSX)中没有流量的父通信,或者这个codeacademy Redux教程,首先说"如果你对普通的React和你的所有数据都没问题就不需要Redux根组件".
    • 哪个看起来很适合我的目的......
    • ... 然而,令人遗憾的是,这些回调必须在组件链中传递,随着嵌套级别的增长,这变得很快.

为了解决这个问题而不引入新的依赖关系,我发现两篇文章(1:Andrew Farmer,2:Hao Chuan)鼓励使用最近引入的React上下文特性.

→使用context将让我将模型变异回调暴露给我的子组件.对我而言,这听起来不像是一个可怕的误用:我不会传递模型数据,只是引用用于绑定事件处理程序的函数.

  • 听起来很健全吗?
  • 是否有其他简单的React建议方便儿童→家长沟通?

谢谢.

flux reactjs reactjs-flux redux

5
推荐指数
1
解决办法
298
查看次数

如何配置 TypeScript 项目引用以实现复合子项目的绝对导入,以免在运行时崩溃?

这是一个可克隆项目,其中包含我的问题的最少代码:GitHub / ronjouch / demo-ts-project-references

\n

在此项目中,我正在设置一个基于TS Project References的项目,以便子项目app依赖于复合子项目lib

\n

通过这个设置,在内部app/index.js,我能够

\n
import { LETTER_A } from \'../lib\';\n
Run Code Online (Sandbox Code Playgroud)\n

有了这个设置,好消息,

\n
    \n
  1. npm run compile(调用tsc -b lib app)成功构建。
  2. \n
  3. npm start(调用node dist/app/index.js)成功运行。
  4. \n
\n

现在,我注意到(感谢 VSCode)如果我lib使用非相对导入进行导入,TSC 也会很高兴:

\n
import { LETTER_A } from \'lib\';\n//          no "../" here ^\n
Run Code Online (Sandbox Code Playgroud)\n

,我更喜欢并且想要,因为在真正的应用程序中,从深度嵌套的文件中进行这样的导入是非常方便的,而不是

\n
import { LETTER_A } from \'../../../../lib\';\n//     AAaaaAaAAaaargh :( ^^^^^^^^^^^^\n …
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
1037
查看次数

如何在GAE/Python上进行'access_type = offline'/仅服务器OAuth2操作?

这篇文章是如何在GAE cron工作中执行OAuth要求操作的后续内容,我意识到我错误地使用了@oauth_required装饰器OAuth2DecoratorFromClientSecrets.

正如OAuth 2.0解释的演示文稿所述,Oauth 2.0解决了以下问题:

  • 建立服务 ......
  • ...由用户访问...
  • ... 并从第三方访问用户的数据.

这就是@oauth_required摘要,它做得很好(目前我的应用程序"有效":如果我触发刷新页面,我会被要求授权访问我的YouTube数据到我的应用程序,其余部分如下).但那不是我想要的!我的应用程序做了一些更简单的事情,即每天使用我的凭据创建一个youtube播放列表,无需任何用户输入.因此,为了与上述3层联想进行比较,我希望:

  • 一项服务
  • ...由用户访问
  • ... 但仅访问"服务器拥有的"YouTube播放列表数据.我不想访问用户的YouTube数据,我只想修改播放列表I(即我/服务器持久保存的用户ID).

但我仍然需要帮助才能做到这一点; 这是我目前的状态:

  1. 经过几次搜索后,我了解到我想要做的就是称为离线访问(强调我的,这几乎就是我的用例):
    "在某些情况下,当用户不在时,您的应用程序可能需要访问Google API.这方面的例子包括备份服务和应用程序,这些应用程序在周一早上8点正好发布博客帖子.这种访问方式称为脱机,Web服务器应用程序可以请求用户进行脱机访问.正常和默认的访问方式称为在线. " ...
    →所以我应该继续做我现在正在做的事情,继续请求访问我的YouTube帐户,但是使用type_access=offline标志来获取令牌,并持续/使用它来进行后续请求.

  2. 脱机访问使用刷新令牌部分使总感觉,但停留在一般的HTTP水平.作为一个新手,我不知道如何将这些原则集成到我的Python代码中,我没有找到任何示例Python代码....
    →任何人都可以帮我一个Python示例说明如何以及在何处使用这面旗帜?

  3. ...特别是在学习之后oauth2client.appengine.OAuth2Decorator.oauth_required,我仍然不确定我是否可以将它弯曲到我的情况,或者我是否应该做自己的事情.
    →你怎么看?

谢谢你的时间; 如果需要我也会在irc://irc.freenode.net/#appengine上闲逛ronj.

python google-app-engine google-api oauth-2.0 google-api-python-client

4
推荐指数
1
解决办法
4014
查看次数

如何在GAE任务队列中执行OAuth操作?

我有一个简单的Google App Engine应用程序,其中包含一个/update更新YouTube播放列表的页面.它看起来像这样:

class UpdatePage(webapp2.RequestHandler):

    @decorator.oauth_required
    def get(self):
        update_result = self.update_playlist()
        ...

routes = [('/update', UpdatePage),
          (decorator.callback_path, decorator.callback_handler())]
app = webapp2.WSGIApplication(routes, debug=True)
Run Code Online (Sandbox Code Playgroud)

它按预期update_playlist()工作,该方法完成其工作,但事实证明,在某些情况下,它可以运行很长一段时间,导致一个DeadlineExceededError.所以在阅读了可用的选项之后,我认为Task Queue API是要走的路(对吗?),我正在尝试使用它,遵循Python中使用推送队列指南.

→简而言之,我分成UpdatePageUpdatePageHandler+ UpdatePageWorker:

class UpdateHandlerPage(webapp2.RequestHandler):

    @decorator.oauth_required
    def get(self):
        taskqueue.add(url='/updateworker')

class UpdateWorkerPage(webapp2.RequestHandler):

    def post(self):
        update_result = self.update_playlist()
        ...

routes = [('/update', UpdateHandlerPage),
          ('/updateworker', UpdateWorkerPage),
          (decorator.callback_path, decorator.callback_handler())]
app = webapp2.WSGIApplication(routes, debug=True)
Run Code Online (Sandbox Code Playgroud)

不幸的是,在进行拆分后,我的OAuth2装饰器似乎不再起作用了:

INFO     2013-05-30 17:08:53,971 discovery.py:709] URL being requested: https://www.googleapis.com/youtube/v3/playlists?alt=json&part=snippet%2Cstatus
WARNING  2013-05-30 …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-api task-queue google-api-python-client

2
推荐指数
1
解决办法
1425
查看次数