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


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

    查看最大进程数  sysctl kernel.pid_max

    查看进程数  ps -eLf | wc -l 

    确认是进程数满了
    修改最大进程数后系统恢复
    echo 1000000 > /proc/sys/kernel/pid_max

    永久生效
    echo "kernel.pid_max=1000000 " >> /etc/sysctl.confsysctl -p

    老版本系统的内核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.confsysctl -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 - 最大实时优先级

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

  • 相关阅读:
    JAVA向上转型和向下转型
    LeetCode记录之9——Palindrome Number
    LeetCode记录之7——Reverse Integer
    JAVA数据结构--插入排序
    JAVA数据结构--选择排序
    JAVA数据结构--冒泡排序
    HTTP协议04-返回状态码
    HTTP协议03-http特点及请求方式
    HTTP协议02-请求和响应的报文构成
    HTTP笔记01-http相关的基础知识
  • 原文地址:https://www.cnblogs.com/shigfdengys/p/12168985.html
Copyright © 2020-2023  润新知