Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript web服务器上的nodejs应用程序导致fork爆炸-bash:fork:retry:无子进程_Javascript_Node.js_Bash_Apache - Fatal编程技术网

Javascript web服务器上的nodejs应用程序导致fork爆炸-bash:fork:retry:无子进程

Javascript web服务器上的nodejs应用程序导致fork爆炸-bash:fork:retry:无子进程,javascript,node.js,bash,apache,Javascript,Node.js,Bash,Apache,我正在使用nodejs应用程序(expressjs、request等)在web主机上托管一个网站。这个web主机有一个apache终端,我可以在那里调用node app.js&或forever start app.js,应用程序运行正常。 然而,一旦终端关闭,正在使用的进程数量就会膨胀到大约30个,这意味着下次我打开终端时,不会收到[hostname@server~]$我得到的是: bash: fork: retry: No child processes bash: fork: retry:

我正在使用nodejs应用程序(expressjs、request等)在web主机上托管一个网站。这个web主机有一个apache终端,我可以在那里调用
node app.js&
forever start app.js
,应用程序运行正常。 然而,一旦终端关闭,正在使用的进程数量就会膨胀到大约30个,这意味着下次我打开终端时,不会收到
[hostname@server~]$
我得到的是:

bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: Resource temporarily unavailable
bash-4.2$
不知怎的,我相信有人在制造叉形炸弹,但我似乎不知道在哪里,为什么?我没有在任何地方使用
fork()
,如果我使用
forever
启动我的应用程序,日志中没有显示错误或正在创建新进程的迹象

发生这种情况时,我有一半时间不能使用任何终端命令,直到我成功地使用了pkill/pgrep

我试着打电话给bash-4.2$top,结果是:

top - 13:41:13 up 71 days, 20:57, 0 users, load average: 1.82, 1.81, 1.72
Tasks: 14 total, 1 running, 2 sleeping, 11 stopped, 0 zombie
%Cpu(s): 11.7 us, 2.7 sy, 0.1 ni, 85.5 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 41034544 total, 2903992 free, 6525792 used, 31604760 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 28583704 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1001511 xxxxxxxx 20 0 11880 3692 1384 S 0.0 0.0 0:00.02 bash
1001578 xxxxxxxx 20 0 11880 2840 524 T 0.0 0.0 0:00.00 bash
1001598 xxxxxxxx 20 0 11880 2672 348 T 0.0 0.0 0:00.00 bash
1001599 xxxxxxxx 20 0 11880 2896 524 T 0.0 0.0 0:00.00 bash
1001600 xxxxxxxx 20 0 11880 2720 396 T 0.0 0.0 0:00.00 bash
1001607 xxxxxxxx 20 0 11880 2928 532 T 0.0 0.0 0:00.00 bash
1001613 xxxxxxxx 20 0 11880 2964 532 T 0.0 0.0 0:00.00 bash
1001618 xxxxxxxx 20 0 11880 2780 348 T 0.0 0.0 0:00.00 bash
1001619 xxxxxxxx 20 0 12012 3024 544 T 0.0 0.0 0:00.00 bash
1001620 xxxxxxxx 20 0 11880 2804 372 T 0.0 0.0 0:00.00 bash
1001651 xxxxxxxx 20 0 12012 2836 352 T 0.0 0.0 0:00.00 bash
1001653 xxxxxxxx 20 0 12016 3392 896 T 0.0 0.0 0:00.00 bash
1004463 xxxxxxxx 20 0 9904 1840 1444 S 0.0 0.0 0:00.00 bash
1005200 xxxxxxxx 20 0 56364 1928 1412 R 0.0 0.0 0:00.00 top
这看起来像是在重复执行
bash
过程

我的实际nodejs
app.js
是一个典型的expressjs web应用程序,代码如下(缩写示例代码):


关于为什么会发生这个问题有什么想法吗?我对node比较陌生,因此非常感谢您提供的任何帮助,如果出现任何noob错误,我将表示歉意。

因此,似乎问题实际上源自我的
~/.bashrc
文件,其中包含以下行:

# User specific aliases and functions

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
如果这些行被注释掉,那么问题就不再发生。但是,我显然不能使用节点命令,因为nvm没有启动


不知何故,只要访问终端,代码就会循环创建多个bash实例。

因此,问题似乎实际上源于我的
~/.bashrc
文件,其中包含以下行:

# User specific aliases and functions

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
如果这些行被注释掉,那么问题就不再发生。但是,我显然不能使用节点命令,因为nvm没有启动


不管怎样,只要访问终端,代码就会循环创建多个bash实例。

是否使用可视代码扩展名“Visual Studio IntelliCode”? 如果是,请尝试将其删除。不再有“叉子炸弹”。不要问我为什么。我只知道,经过3个小时的思考,我终于找到了停止节点分叉过程的方法


上下文:Windows上的可视代码,通过VS代码处的远程SSH插件使用Ubuntu服务器访问VPS。NVM已安装。如果我删除NVM和/或删除~/.bashrc处的导出行,则不会发生任何事情。创建了数千个Zumbi进程。我删除了Visual Studio IntelliCode扩展,瞧!一切正常。

是否使用可视代码扩展名“Visual Studio IntelliCode”? 如果是,请尝试将其删除。不再有“叉子炸弹”。不要问我为什么。我只知道,经过3个小时的思考,我终于找到了停止节点分叉过程的方法


上下文:Windows上的可视代码,通过VS代码处的远程SSH插件使用Ubuntu服务器访问VPS。NVM已安装。如果我删除NVM和/或删除~/.bashrc处的导出行,则不会发生任何事情。创建了数千个Zumbi进程。我删除了Visual Studio IntelliCode扩展,瞧!一切正常。

当你不再使用node app.js时会发生这种情况吗?当你使用node app.js并退出时,这种情况还会发生吗?使用
node app.js&
仍然会导致错误,但它最终会停止应用程序(域发布503错误)当
永远保持应用程序运行时,您需要确定NodeJS进程是否正在重新启动,或者NodeJS应用程序是否正在分叉。要做到这一点,我建议在NodeJS应用程序加载开始时将一些简单的东西写入文件。如果该文件中有30个条目,则操作系统会一次又一次地重新启动NodeJS。附带说明:NodeJS是单线程的,不能单独生成/派生进程。现在大多数人都使用NodeCluster来实现这一目的。之前你会看到使用
child\u process
。请查看此答案的编辑,了解为什么forever可能会重新启动你的应用程序@RandyCasburn感谢这个想法,我实现了一个脚本,它在应用程序加载时写入调试文本文件,但只追加了一行。然而,从
top
命令看来,正在创建的进程是
bash
进程?当您不永远使用时会发生这种情况吗?就像在使用node app.js&并退出时一样,它还会发生吗?使用
node app.js&
仍然会导致错误,但它最终会停止应用程序(域发布503错误)当
永远保持应用程序运行时,您需要确定NodeJS进程是否正在重新启动,或者NodeJS应用程序是否正在分叉。要做到这一点,我建议在NodeJS应用程序加载开始时将一些简单的东西写入文件。如果该文件中有30个条目,则操作系统会一次又一次地重新启动NodeJS。附带说明:NodeJS是单线程的,不能单独生成/派生进程。现在大多数人都使用NodeCluster来实现这一目的。之前你会看到使用
child\u process
。请查看此答案的编辑,了解为什么forever可能会重新启动你的应用程序@RandyCasburn感谢这个想法,我实现了一个脚本,它在应用程序加载时写入调试文本文件,但只追加了一行。然而,从
top
命令看来,正在创建的进程是
bash
进程?
app.get('*', function(req, res) {
    "use strict";
    res.redirect('/404.html');
});

console.log('Listening on 8080');
app.listen(8080);
# User specific aliases and functions

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion