Linux报错-bash: fork: retry: Resource temporarily unavailable和进程描述符之间的关系

在公司服务器上切换用户,出现 "-bash: fork: retry: Resource temporarily unavailable"这样的报错,查询得知是普通用户能够使用的进程数太少和文件描述符太小导致的,每一个文件描述符会和一个文件对应,但是很多文件描述符也会和一个文件对应。相同的文件可以被不同的进程打开,也可以被同一个进程打开多次。我们可以从系统层面和进程层面来查看相应的文件描述符。

一,系统层面的文件描述符

涉及到系统层面的,基本上都是通过修改内核参数来实现的,修改系统中的文件描述符可以通过下面两种方式来实现:

1,/proc/sys/fs/file-max,这个里面记录了系统中可以打开的文件描述符最大有多少个,我们可以使用cat查看下总数有多少个,如果不够了echo进更大的数,一般情况下不用动的。

cat    /proc/sys/fs/file-max

2,方法1是临时性的更改,系统重启后参数就会失效,因此需要写入文件中保存起来,Linux下修改的内核参数,修改的文件都是在/etc/sysctl.conf文件中,我们需要写入下面内容:

fs.file-max=xxxx

然后使用sysctl -p 命令来生效。

除此以外我们还可以通过/proc/sys/fs/file-nr参数来查看系统中文件描述符。

cat   /proc/sys/fs/file-nr

2272   0     100000

2272     : 表示当前系统已分配使用了多少文件描述符

0          : 表示当前系统分配了2272个文件描述符,有多少个是没有使用的。

100000 : 表示系统中文件描述符总的个数

二,进程层面的文件描述符

进程层面的文件描述符可以通过ulimit命令来表示,也可以通过配置文件生效,可以通过这两种方法来生效:

1,ulimit -u     表示单个用户可以使用的最大的进程数

ulimit -n      表示可打开的文件描述符的最大个数

修改文件描述符可以通过这个命令:

ulimit -SHn xxxxxx ,其中S表示"soft",表示软限制,是可以超过这个限制,H表示"hard",表示硬限制,是不能超过这个限制的。

2 , 同样方法1是临时性的,永久有效的话,必须写入配置文件中,文件描述符中配置文件路径在/etc/security/limits.conf 写入

* soft     nofile      32768      可以打开的文件描述符最大数(软限制)
    * hard    nofile      65536      可以打开的文件描述符最大数(硬链接)

* soft     nproc      32768      单个用户可以使用的最大进程数(软限制)
    * hard    nproc      65536      单个用户可以使用的最大进程数(硬限制)

或者可以在/etc/security/limits.d/xxx-nproc.conf(若不存在则创建)写入

* soft     nproc      32768      
    * hard    nproc      65536

在/etc/security/limits.d/xxx-nofile.conf(若不存在则创建)写入
    * soft     nofile      32768      
    * hard    nofile      65536

其中的第一列表示domain域,可以给没某个用户限制,或者某个用户组限制,*表示对所有的用户限制,但是root用户除外,root用户不受限制。具体的使用,可以使用man limits.conf来查询。

时间: 2024-10-11 12:21:13

Linux报错-bash: fork: retry: Resource temporarily unavailable和进程描述符之间的关系的相关文章

ssh登录报错-bash fork retry Resource temporarily unavailable

解决方法:

-bash: fork: retry: Resource temporarily unavailable;centos6.5

Last login: Wed Jun 18 14:04:11 2014 from 1.1.1.135 -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporaril

-bash: fork: retry: Resource temporarily unavailable

登陆不了服务器The server refused to start a shell. 登陆服务器后执行ls命令报错: 1 2 $ls 上面这段错误提示的本质是Linux操作系统无法创建更多进程,导致出错.因此要解决这个问题需要修改Linux允许创建更多的进程. 修改Linux最大进程数 我们可以通过ulimit -a来查看当前Linux系统的一些系统参数. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ ulimit -a core file size 

修改linux用户的可以打开的最大文件数和进程数(fork: retry: Resource temporarily unavailable)

今天,jenkins发布应用时,遇到一个报错,如下: /etc/profile:fork: retry: Resource temporarily unavailable Google了一下,网上大家大部分说原因可能是,用户的进程数或者文件打开数,达到了限制.按照这个思路,我去查问题,发现用户的进程数为200多,文件打开数为1300多 而通过ulimit–a,看到 openfiles                      (-n) 1024 maxuser processes        

linux报错-bash: ./xx.sh: Permission denied

linux报错-bash: ./xx.sh: Permission denied 在linux下执行sh文件时提示: -bash: ./xx.sh: Permission denied 进行授权: chmod 777 xx.sh Linux chmod +755和chmod +777 区别: 755 代表用户对该文件拥有读,写,执行的权限, 同组其他人员拥有执行和读的权限,没有写的权限,其他用户的权限和同组人员权限一样. 777代表,user,group ,others ,都有读写和可执行权限.

cannot set user id: Resource temporarily unavailable

前阵子,Infra报告无法透过putty以及SecureCRT连接到数据库服务器,提示的错误为Resource temporarily unavailable.由于该服务器上有差不多有20个nstance,应该是超出了系统当前设置的值.关于超出资源限制的事之前有碰到过,只不过不是这个错误,而是open files: cannot modify limit: Operation not permitted.下面描述一下关于Resource temporarily unavailable这个错误及其

bash: fork: Resource temporarily unavailable

Last login: Wed Jul 26 09:19:11 2017 from ... -bash: fork: Resource temporarily unavailable -bash-3.2$ ps -ef | grep jerry -bash: fork: Resource temporarily unavailable -bash: fork: Resource temporarily unavailable -bash-3.2$ df -h -bash: fork: Resou

su切换用户报错cannot set user id: Resource temporarily unavailable

su: cannot set user id: 资源暂时不可用 登录root su - tomcat 报错: cannot set user id: Resource temporarily unavailable tomcat账号突然不可用. 根本原因是:linux操作系统默认最大允许进程数是1024. 随着应用的增加,我们的需求已超过了1024 曾经改过nproc配置: cat >> /etc/security/limits.conf << EOF *           so

[转] - linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错

linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错 首先是我把套接字设置为异步的了,然后在使用write发送数据时采取的方式是循环发送大量的数据:由于是异步的,write\send将要发送的 数据提交到发送缓冲区后是立即返回的,并不需要对端确认数据已接收.在这种情况下是很有可能出现发送缓冲区被填满,导致write\send无法再向缓冲 区提交要发送的数据.因此就产生了Resource temporarily un