su: failed to execute /bin/bash: Resource temporarily unavailable
最常见原因是用户进程数(nproc)达到限制,通过调整中oraclellg的nproc限制即可解决。
要解决 su: failed to execute /bin/bash: Resource temporarily unavailable
错误,需从用户进程数限制(nproc)或系统资源耗尽角度分析,以下是分步解决方案:
步骤1:检查用户进程数是否达到限制
每个用户能运行的最大进程数由 nproc
限制,若进程数达到上限,会导致无法创建新进程(如切换用户时启动 bash
)。
-
统计
oraclellg
用户当前进程数:ps -u oraclellg | wc -l
-
查看
oraclellg
用户的nproc
限制(用 root 用户执行):su - oraclellg -c "ulimit -u"
或查看限制配置文件(
/etc/security/limits.conf
或/etc/security/limits.d/
下的文件):cat /etc/security/limits.conf | grep oraclellg cat /etc/security/limits.d/* | grep oraclellg
步骤2:调整用户进程数限制(若达到上限)
若 oraclellg
的进程数接近/达到 nproc
限制,需扩大限制:
-
编辑进程数限制配置文件(以
/etc/security/limits.conf
为例):vi /etc/security/limits.conf
-
添加/修改
oraclellg
的nproc
限制(根据需求调整数值,示例为放宽到较大值):oraclellg soft nproc 65535 oraclellg hard nproc 65535
soft nproc
:软限制(用户可临时超过,但系统会警告)。hard nproc
:硬限制(绝对上限,无法超过)。
-
保存文件后,重新登录或切换用户(无需重启系统),验证是否能正常切换:
su - oraclellg
步骤3:排查系统整体资源(可选)
若调整 nproc
后仍报错,需检查系统整体资源(如进程 ID 总数、内存/CPU 耗尽):
-
查看系统最大进程 ID 限制:
cat /proc/sys/kernel/pid_max
若当前系统进程数(
ps -ef | wc -l
)接近该值,需调整pid_max
(需 root 权限,编辑/etc/sysctl.conf
后执行sysctl -p
)。 -
检查内存/CPU 使用:
用top
或free -h
查看内存占用,若内存耗尽,需释放内存(如关闭无用进程)。
总结
最常见原因是用户进程数(nproc)达到限制,通过调整 /etc/security/limits.conf
中 oraclellg
的 nproc
限制即可解决。
更多推荐
所有评论(0)