连接linux服务器报错fork: retry: No child processes解决方案

问题描述

在连接远程服务器时突然遇到fork: retry: No child processes报错,之后重新登录服务器才使用一段时间后又继续报错fork: retry: No child processes


原因分析:

1.可能是用户的线程满了导致的

2.可能是僵尸进程太多导致的

解决方案:

方案一:

使用命令ulimit -a查看

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 513124
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1048576
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) unlimited
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

可以看到max user processes数为4096,

$ ulimit -u 10000
$ ulimit -u
10000

注:这种方式只能暂时修改进程数,退出服务器之后会自动更改为服务器的默认设置。

要想永久更改需要到配置文件中修改该参数,这需要在root环境下操作

# sudo vi /etc/security/limits.d/20-nproc.conf


# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited

将参数4096修改为10000即可

修改进程数到10000可以暂时解决fork: retry: No child processes这个问题。但是过一段时间之后还是会出现fork: retry: No child processes的问题

方案二:

使用top命令查看僵尸进程数

$ top

查找出服务器中的僵尸进程,将其杀死。

$ ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
Z    169111 170661 [python3.8] <defunct>
Z    169111 170661 [python3.8] <defunct>
...
Z    169111 170661 [python3.8] <defunct>
Z    169111 170661 [python3.8] <defunct>
  • -A:参数列出所有进程
  • -o:自定义输出字段,我们设定显示字段为stat(状态,ppid(父进程pid,pid(进程pid,cmd(命令行)这四个参数
  • 因为状态为 z 或者 Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
$ ps aux |grep 169111 |grep -v grep
user   169111  0.0  0.0 141500  9868 ?        Ss   10月27   0:58 0:58 /home/user/anaconda3/envs/drugban/bin/python3.8 /home/user/.pycharm_helpers/generator3/__main__.py -d /home/user/tmp/jY36P3ZorR --init-state-file

可以看到是用户下python的执行文件,可以选择杀死这个僵尸进程

kill -HUP 169111

再重复上述操作,杀死一些无用的僵尸进程

 参考文献:

linux fork: retry: 没有子进程、资源暂时不可用问题解决 - 简书 (jianshu.com)

ヾ(≧▽≦*)o欢迎回来!Linux的普通用户bash突然报错bash fork retry No child processes的解决办法 | 二丫讲梵 (eryajf.net)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值