要解决 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 限制,需扩大限制:

  1. 编辑进程数限制配置文件(以 /etc/security/limits.conf 为例):

    vi /etc/security/limits.conf
    
  2. 添加/修改 oraclellgnproc 限制(根据需求调整数值,示例为放宽到较大值):

    oraclellg  soft  nproc  65535
    oraclellg  hard  nproc  65535
    
    • soft nproc:软限制(用户可临时超过,但系统会警告)。
    • hard nproc:硬限制(绝对上限,无法超过)。
  3. 保存文件后,重新登录或切换用户(无需重启系统),验证是否能正常切换:

    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 使用:
    topfree -h 查看内存占用,若内存耗尽,需释放内存(如关闭无用进程)。

总结

最常见原因是用户进程数(nproc)达到限制,通过调整 /etc/security/limits.conforaclellgnproc 限制即可解决。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐