“-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 - 最大实时优先级

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

当linux报 “-bash: fork: 无法分配内存”的更多相关文章

  1. Linux设备驱动程序学习之分配内存

    内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 ...

  2. 切换普通用户报 -bash: fork: retry: No child processes

    ssh 连接普通用户 报这个错误 -bash: fork: retry: No child processes 解决办法: 更改vi /etc/security/limits.d/20-nproc.c ...

  3. -bash: fork: Cannot allocate memory 问题的处理

    今天生产机器突然无法登录了,正好有一个用top挂着,但是退出top,执行任何命令都报-bash: fork: Cannot allocate memory,但是查看内存还是有很多空闲,然后在百度上查了 ...

  4. linux. -bash: fork: retry: Resource temporarily unavailable错误

    切换用户或登陆服务器后执行ls命令报错: -bash: fork: retry: Resource temporarily unavailable 上面这段错误提示的本质是Linux操作系统无法创建更 ...

  5. Atlas运行时资源不足报错 -bash: fork: retry: 资源暂时不可用 Out of system resources

    目的:运行Atlas并使用Azkaban执行操作任务 环境:Centos 6 内存大小:12G 启动下面的任务后还剩内存将近5G 问题: 当mysql_to_hdfs_db和其他job同时运行时集群很 ...

  6. 【解决方法】安装Win7和linux双系统后,linux报错“无法分配所提交的分区 not enough free space on disks”问题,以及win7无法启动“BootMGR image is corrupt....”问题

    近日,在笔记本上重装了Win7 企业版(64位)后,想装个linux双系统,于是开始安装 centOS 6.2(光盘安装) 硬盘分了一个主分区(c盘),一个扩展分区(3个逻辑分区:d,e,f盘),然后 ...

  7. linux设备驱动归纳总结(五):1.在内核空间分配内存【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-79134.html linux设备驱动归纳总结(五):1.在内核空间分配内存 xxxxxxxxxxxx ...

  8. 高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)

    1 内存中不连续的页的分配 根据上文的讲述, 我们知道物理上连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续的内存块. 在用户空间中这不是问题,因为 ...

  9. alloc_page分配内存空间--Linux内存管理(十七)

    1 前景回顾 在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Know ...

随机推荐

  1. pytest 10 skip跳过测试用例

    pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者你希望失败的测试功能 skip意味着只有在满足某些条件时才希望测试通过,否则pytest应该跳过运行测试.常见事例时非win ...

  2. Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系

    1. sdk platform 简单理解为系统版本 最新级别: 28:Android 9 27:Android 8.1 26:Android 8.0 25:Android 7.1 24:Android ...

  3. fedora make: gcc:命令未找到(解决方法)

    安装C开发环境 由于gcc包需要依赖binutils和cpp包,另外make包也是在编译中常用的,所以一共需要9个包来完成安装,因此我们只需要执行9条指令即可: yum install cpp yum ...

  4. JDBC事务管理

    JDBC事务管理 概念回顾: 事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,那么这个业务操作的多个步骤要么同时失败,要么同时成功 事务操作: 开启事务 提交事务 回滚事务 使用Conn ...

  5. [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.3 广义 Newton 法则---本构方程

    1.  ${\bf P}=(p_{ij})$, 而 $$\bex p_{ij}=-p\delta_{ij}+\tau_{ij}, \eex$$ 其中 $\tau_{ij}$ 对应于摩擦切应力. 2. ...

  6. Gram 矩阵与向量到子空间的距离

    设 $W$ 是 $n$ 维 Euclidean 空间 $V$ 的子空间, $\beta\in V$, 定义 $\beta$ 到 $W$ 的距离  $$\bex  \rd (\beta,W)=|\bet ...

  7. Web常见漏洞修复建议

    一.SQL注入修复建议 1.过滤危险字符,例如:采用正则表达式匹配union.sleep.and.select.load_file等关键字,如果匹配到则终止运行. 2.使用预编译语句,使用PDO需要注 ...

  8. 【汇总目录】C#

    [2019年04月29日] C# textbox 自动滚动 [2019年02月07日] C#利用VUDP.cs开发网络通讯应用程序 [2019年02月06日] C#利用VINI.cs操作INI文件 [ ...

  9. win10免安装版本的MySQL的下载安装和配置

    下载mysql-xxx.zip(免安装版) 解压到自己想要的目录下(我的是D:\mysql\),打开mysql-5.7.21-winx64文件夹,新建my.ini文件,输入: [mysql] # 设置 ...

  10. (四)Java工程化--Git基础

    GIT学习参考:https://git-scm.com/book/zh/v2 常见命令 git init 初始化项目 git add *.java 添加文件到git版本控制(.java后缀的全部文件) ...