• 当linux报 “-bash: fork: 无法分配内存”


    “-bash: fork: 无法分配内存”,发现连了好多终端,然后断开了一个终端,然后这边终端可以敲命令了

    [root@172.16.31.105 /home/www/test]# free -m
                 total       used       free     shared    buffers     cached
    Mem:         15979       8025       7954          0        218       1109
    -/+ buffers/cache:       6697       9282
    Swap:            0          0          0

    卧槽,还有那么多内存。。。很无语,然后又开始敲命令,结果又报刚才那个问题“-bash: fork: 无法分配内存”,另外一个终端连接也出问题了

    [root@172.16.31.102 ~]# ssh 172.16.31.105
    shell request failed on channel 0 

    网上说老版本系统的内核pid参数比较小(默认设置的是32768),验证了一下,然后我又断开一个终端,这边ps了一下

    [root@172.16.31.105 ~]# ps
      PID TTY          TIME CMD
    32775 pts/1    00:00:00 bash
    32765 pts/1    00:00:00 ps   

    很明显ps的pid号明显接近于内核默认pid了,立即修改内核pid,并让其生效命令如下:

    echo "kernel.pid_max=64000" >>/etc/sysctl.conf

    sysctl -p 

    生效后,终端立刻就可以直连这台机器了。

    再次验证

    找了另外一台机器,先多连几个终端,之后将内核pid改小最好近似于当前pid最大值,改完生效后马上问题就出来了 报 “-bash: fork: 无法分配内存”  接着内核参数

    注意:有的机器pid用的比较严重,敲好多次命令都会报“-bash: fork: 无法分配内存”   因此只能重启服务器,运气好的话多敲几次命令就可以看到。

    (二)

    还有种情况是系统当前的的进程数 太多太多,报-bash: fork: 无法分配内存

          后来发现是因为非root用户打开的进程数太多  解决方法

    普通用户的nproc必须配置这个文件才能生效

     vi /etc/security/limits.d/90-nproc.conf 

    # Default limit for number of user's processes to prevent
    # accidental fork bombs.
    # See rhbz #432903 for reasoning.
    *          soft    nproc     111111
    root       soft    nproc     unlimited
     
    [root@db-172-16-3-150 ~]# ulimit -u
    131073
    [root@db-172-16-3-150 ~]# su - postgres
    postgres@db-172-16-3-150-> ulimit -u
    111111
    
    
    普通用户用了/etc/security/limits.d/90-nproc.conf 软限制的配置, 而root用户用了/etc/security/limits.conf硬限制的配置.
    如果是root打开进程数太多修改

       vim  /etc/security/limits.conf

    添加:

    * soft nproc 32000
    * hard nproc 32000

    有关limits.conf参数的注释

    - core - 限制核心文件大小(KB)
    - data - 最大数据大小(KB)
    - fsize - maximum filesize(KB)
    - memlock - 最大锁定内存地址空间(KB)
    - nofile - 最多打开的文件
    - rss - max resident set size(KB)
    - stack - 最大堆栈大小(KB)
    - cpu - 最大CPU时间(MIN)
    - nproc - 最大进程数
    - as - 地址空间限制(KB)
    - maxlogins - 此用户的最大登录号
    - maxsyslogins - 系统上登录的最大数量
    - priority - 运行用户进程的优先级
    - locks - 用户可以容纳的文件锁的最大数量
    - sigpending - 待处理信号的最大数量
    - msgqueue - POSIX消息队列使用的最大内存(字节)
    - nice - 最大优先级允许提高到值:[-20,19]
    - rtprio - 最大实时优先级

     注:可能导致这种错误的有很多很多,后面如有发现继续更新

  • 相关阅读:
    webjars管理静态资源
    SpringCloud踩坑日记
    ELK日志搜索平台搭建
    新硬盘挂载到目录后目录原先数据消失解决办法
    nginx安装缺少依赖记录
    SpringCloud踩坑日记
    .bashrc配错刷新导致linux基础命令不能用修复
    nginx超时时间配置
    nginx日志切分shell脚本
    2019.10.10 实习日记
  • 原文地址:https://www.cnblogs.com/rutor/p/7016338.html
Copyright © 2020-2023  润新知