小编N.X*_*.Xu的帖子

如何限制nodejs中最大rss内存大小?

我们在云服务器上运行了一个 Nodejs 服务,只给它 512MB RAM(对于应用程序来说绰绰有余)。

服务器的内存使用量缓慢增长。当读取到512MB内存限制时,服务器会自动重新启动。

我尝试通过大量负载测试来读取内存使用统计信息,该数字显示缓慢增长rss memory usage,但非常稳定低heap memory usage

我尝试过--max_old_space_size,但这只会限制堆大小,这对我来说从来都不是问题。堆大小读取始终低于 50MB。

有办法限制rss memory size吗?


  1. rss一些快速研究表明和之间的区别heap是 C++ 代码的缓冲区大小。不确定是否可以调试它们(gdb?)。

  2. 有人说 v8 有 1.4GB 的限制,这也是堆大小限制吗?如果是rss限制,也许我可以修改nodejs源代码,构建一个限制更小的特殊版本?

  3. --expose-gc经常尝试清理GC,但同样,这只有助于堆使用(并减慢它的速度)。


更新:找到了原因,RSS 使用量不断增长是由于我们使用的库之一的 C++ 内存泄漏(谢谢bignum)。避免使用它可以保持 rss 内存稳定。

memory limit node.js

6
推荐指数
0
解决办法
1900
查看次数

当使用不同的函数渲染时,ReactJS 子组件会丢失其状态

在编写 ReactJS 组件时,我发现子组件有时会丢失状态。事实证明,如果子组件使用不同的渲染函数渲染,就会发生这种情况。

IE

父组件有 2 个子渲染函数,根据不同的条件,它要么在主体中渲染子组件,要么在标头中渲染子组件。

    ...

    renderInHeader = () => (<Header><ChildComponent /></Header>);

    renderInBody = () => (<Body><ChildComponent /><Body>);

    render = () => {
      if (somethingHappens) {
        return this.renderInHeader();
      }
      return this.renderInBody();
    }

    ...
Run Code Online (Sandbox Code Playgroud)

这意味着,当 时somethingHappens,它将使用不同的渲染函数来渲染ChildComponent.

那么,ChildComponent就会失去它的状态。(子组件的状态被重置)。


我理解为什么会发生这种情况,实际上我有点惊讶孩子的状态没有更频繁地重置(即每次父级重新渲染该节点时重置)。

然而,处理这个问题的理想解决方案是什么?

  • 避免在子组件中使用状态?(因为不能保证安全?)

  • key=给ChildComponent一个a ,这样在重新渲染的时候就可以把它当作一个独立的节点了?(不确定是否key可以在映射器之外工作)

  • 使用ref?(不知道是否可以这样工作)

  • 使用 React 16 中的新“Portal”?(还没试过)


注意:我知道我可以使用变量 forHeaderBody,所以只需要一个渲染函数。然而,现实世界的情况可能更复杂,可能有多个子组件分布在不同的区域。

IE

        ...

    renderInBody = () => (
        <Body>
            <Header>
                <ChildComponent1 />
                <ChildComponent2 />
            </Header>
            <ChildComponent3 …
Run Code Online (Sandbox Code Playgroud)

state children reactjs

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

标签 统计

children ×1

limit ×1

memory ×1

node.js ×1

reactjs ×1

state ×1