-bash: fork: Cannot allocate memory问题,进程数满了的解决办法

  今天一大早来到公司就发现一台远程服务器的进程满了,无法连接上远程服务器,如下图所示:

  

  出现这种情况,主要是因为进程跑满了,memory被消耗光了,无法为其他的操作,包括vnc操作命令和SSH连接分配内存,我们可以用两个办法:

  1、init 6(重启服务器,注意,不是重启tomcat)

  大家都知道,死机了就重启开机嘛,要是不行init 6 不行在使用reboot强制重启(可能需要多敲几次)

  第一种比较粗暴,通常情况下我们选择第二种:

  2、

  free:通过free命令查看内存剩余可用情况(这个命令可能需要多敲几遍)

  命令可带参数:

  -b  以Byte为单位显示内存使用情况。

  -k  以KB为单位显示内存使用情况。

  -m  以MB为单位显示内存使用情况。

  -g   以GB为单位显示内存使用情况。

  -o  不显示缓冲区调节列。

  -s<间隔秒数>  持续观察内存使用状况。

  -t  显示内存总和列。

  -V  显示版本信息。

  页面显示参数解释:

  total:总计物理内存的大小。

  used:已使用多大。

  free:可用有多少。

  Shared:多个进程共享的内存总额。

  Buffers/cached:磁盘缓存的大小

Swap:交换分区(虚拟内存)情况;Mem:实际内存的使用情况

  sysctl kernel.pid_max:查看最大进程数

主要是查看pid_max指标的,pid_max是Linux内核用来限制进程数的一个最大指标,换言之,即最大允许进程这个多,超过了服务器就挂了

  ps -eLf | wc -l:查看本服务器进程数

一般出现 -bash: fork: Cannot allocate memory 本机的进程数应该接近或等于pid_max指标值的,此处我已经重启服务器解决了这个问题,所以显示进程数较少

当我们确认是因为进程数满了导致服务器挂了,我们可以

  echo 1000000 > /proc/sys/kernel/pid_max:修改pid_max值为1000000

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

这样就可以了,保险起见 然后找到占用空间最大的进程,把它干掉就解决了

  top:展示进程视图,监控服务器进程数值默认进入top时,各进程是按照CPU的占用量来排序的

第一行:
10:01:23 — 当前系统时间
126 days, 14:29 — 系统已经运行了126天14小时29分钟(在这期间没有重启过)
2 users — 当前有2个用户登录系统
load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行:
Tasks — 任务(进程),系统现在共有183个进程,其中处于运行中的有1个,182个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行:cpu状态
6.7% us — 用户空间占用CPU的百分比。
0.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
92.9% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比

在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间,需要充充电了。

第四行:内存状态
8306544k total — 物理内存总量(8GB)
7775876k used — 使用中的内存总量(7.7GB)
530668k free — 空闲内存总量(530M)
79236k buffers — 缓存的内存量 (79M)

第五行:swap交换分区
2031608k total — 交换区总量(2GB)
2556k used — 使用的交换区总量(2.5M)
2029052k free — 空闲交换区总量(2GB)
4231276k cached — 缓冲的交换区总量(4GB)

第六行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

扩展:top命令的多U多核CPU监控

1、在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:

2、敲击键盘“b”(打开/关闭加亮效果),top的视图变化如下

3. 敲击键盘“x”(打开/关闭排序列的加亮效果),top的视图变化如下:

4、如果要在基本视图中显示“CODE”和“DATA”两个字段,可以通过敲击“r”和“s”键:

top命令的补充:

监控java线程数:

ps -eLf | grep java | wc -l

监控网络客户连接数:

netstat -n | grep tcp | grep 侦听端口 | wc -l

pmap PID

大家都熟悉Linux下可以通过top命令来查看所有进程的内存,CPU等信息。除此之外,还有其他一些命令,可以得到更详细的信息,例如进程相关

cat /proc/your_PID/status

通过top或ps -ef | grep '进程名' 得到进程的PID。该命令可以提供进程状态、文件句柄数、内存使用情况等信息。
内存相关
    vmstat -s -S M  
该可以查看包含内存每个项目的报告,通过-S M或-S k可以指定查看的单位,默认为kb。结合watch命令就可以看到动态变化的报告了。

也可用  cat /proc/meminfo

要看cpu的配置信息可用

cat /proc/cpuinfo

它能显示诸如CPU核心数,时钟频率、CPU型号等信息。

要查看cpu波动情况的,尤其是多核机器上,可使用

mpstat -P ALL 10

该命令可间隔10秒钟采样一次CPU的使用情况,每个核的情况都会显示出来,例如,每个核的idle情况等。
只需查看均值的,可用
    iostat -c 
IO相关
    iostat -P ALL  
该命令可查看所有设备使用率、读写字节数等信息。

Linux查看物理CPU个数、核数、逻辑CPU个数

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数

# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数

cat /proc/cpuinfo| grep "processor"| wc -l

查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

Cannot allocate memory问题相关推荐

  1. 【Linux】 -bash-4.2#问题和Cannot allocate memory

    1,最近在实际使用linux的过程中中,遇到了一个小问题 在之前,看到根目录"/"下多了一个"~"目录,看到别的服务器都没有,于是忍不住rm -rf ~了.运行 ...

  2. mount cifs出现cannot allocate memory解决方法

    今天囧了啊,在ubuntu挂载的文件夹里面解压数据库,结果linux嫌太大挂掉了直接mount error(12): Cannot allocate memory折腾了好久,终于发现解决办法: 方法一 ...

  3. 解决Android 启动模拟器是出现“Failed to allocate memory: 8”错误提示

    Android 启动模拟器是出现" Failed to allocate memory: 8"错误,模拟器无法启动,如下: [2012-11-26 13:40:12 - TestS ...

  4. Redis 写磁盘出错 Cannot allocate memory

    故障简介 早上查看Redis日志的时候发现Redis一直在报错 [1524] 24 Mar 10:00:56.037 * 1 changes in 900 seconds. Saving... [15 ...

  5. 【kafka】服务器上Kafka启动 Cannot allocate memory

    1.概述 转载:服务器上Kafka启动报错:error='Cannot allocate memory' (errno=12) 解决问题思路:大问题拆小问题.从源头(Kafka有无启动成功)开始测试, ...

  6. 【kafka】Failed to allocate.memory within the configed max blocking time

    1.场景1 1.1 概述 一个flink任务报错 如下 Failed to allocate.memory within the configed max blocking time kafka在规定 ...

  7. 【Kafka】Failed to send data to Kafka: Failed to allocate memory within the configured max blocking

    1.美图 2.背景 报错 java.lang.Exception: Failed to send data to Kafka: Failed to allocate memory within the ...

  8. virtual memory exhausted: Cannot allocate memory Linux虚拟内存不足,扩展虚拟内存的解决办法

    Linux虚拟内存不足,扩展虚拟内存的解决办法 virtual memory exhausted: Cannot allocate memory 在编译软件的时候,出现了这个错误: virtual m ...

  9. ora 27102 linux,ORA-27102: out of memory Linux-x86_64 Error: 12: Cannot allocate memory

    本帖最后由 cyndi5566 于 2016-3-10 11:04 编辑 今天凌晨2点执行rman报错了,而且开发部的同事告诉我网站也打不开了,请大家帮忙看看..谢谢.. (补充:现在网站可以正常打开 ...

  10. Can't save in background: fork: Cannot allocate memory

    今天服务器提示不可用,查了了redis日志发现: cat /data/redis/redis-server.log [1316] 17 Jun 13:49:28.032 * 1 changes in ...

最新文章

  1. 【高端】几个关于SCSS中for循环的高级玩法
  2. pandas中一列拆分成两列
  3. HTML5 参数传递
  4. 计算机网络之传输层:3、TCP协议
  5. Python自学真的可以学好嘛?
  6. 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】(ZZ伯乐在线)...
  7. 力扣-1534. 统计好三元组
  8. [SimplePlayer] 6. 音频同步
  9. 有刷电机与无刷电机的接线方法(淘宝一卖家写的很好,厚实的实践经验)
  10. ipv4网络无访问权限
  11. 3541. 代码查重
  12. 出行品类HarmonyOS高德地图集成过程分享
  13. openlayers官方教程(三)Basics——Zooming to your location
  14. 多种分类以及模型评估
  15. PS|002自制夸张表情包
  16. 一分钟自我介绍怎么说才精彩
  17. PHP Encoder Ioncube 使用
  18. 线性代数22种题型解题思路
  19. instagram h账号_如何在Instagram上使用多个帐户
  20. 微信小程序趋势及前景,大厂内部资料

热门文章

  1. 利用excel将相邻两个字间的空白去掉
  2. 小程序源码包获取、解压
  3. 基于SSM框架的校园快递代领系统
  4. ADSL(PPPOE)接入指南
  5. CorelDRAW大全集及按键技巧
  6. LCD屏有几种类型?
  7. 如何判断一个捕鱼游戏程序是否好
  8. 微信错误码40001,invalid credential, access_token is invalid or not latest rid: 617f9a29-10da2135
  9. 孙子定理 中国剩余定理
  10. 人均劳动生产率的计算方法_劳动生产率是怎么计算的