gpt4 book ai didi

javascript - Web 服务器上的 NodeJS 应用程序导致 fork 炸弹 - bash : fork: retry: No child processes

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:21 24 4
gpt4 key购买 nike

我使用 Nodejs 应用程序(expressjs、request 等)在网络主机上托管一个网站。 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 炸弹正在被制造出来,但我似乎不知道在哪里或为什么?我没有在任何地方使用 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 应用程序,其代码如下(缩短的示例代码):

var app = express();

app.use(express.static('..//'))
.use(cors())
.use(cookieParser());

...

app.post('/profile', function(req,res){
"use strict";
var id = req.query.id;
con.query("SELECT * FROM xxxxxxx WHERE xxxxx=" + id, function(err,result){
res.send(result);
});
});

...

app.get('*', function(req, res) {
"use strict";
res.redirect('/404.html');
});

console.log('Listening on 8080');
app.listen(8080);

对于为什么会出现此问题有什么想法吗?我对 Node 相对较新,因此感谢任何帮助,如果犯了任何菜鸟错误,我深表歉意。

最佳答案

看来问题实际上源于我的 ~/.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

如果这些行被注释掉,那么问题就不会发生。但是我显然无法使用 Node 命令,因为 nvm 没有启动。

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

关于javascript - Web 服务器上的 NodeJS 应用程序导致 fork 炸弹 - bash : fork: retry: No child processes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56314283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com