當linux報 「-bash: fork: 沒法分配內存」

「-bash: fork: 沒法分配內存」,發現連了好多終端,而後斷開了一個終端,而後這邊終端能夠敲命令了shell

[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          0vim

臥槽,還有那麼多內存。。。很無語,而後又開始敲命令,結果又報剛纔那個問題「-bash: fork: 沒法分配內存」,另一個終端鏈接也出問題了bash

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

網上說老版本系統的內核pid參數比較小(默認設置的是32768),驗證了一下,而後我又斷開一個終端,這邊ps了一下ssh

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

很明顯ps的pid號明顯接近於內核默認pid了,當即修改內核pid,並讓其生效命令以下:post

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 - 最大實時優先級

 注:可能致使這種錯誤的有不少不少,後面若有發現繼續更新

相關文章
相關標籤/搜索