弹性云服务器 ECS-fork失败,无法创建新的线程怎么办?:处理方法

时间:2025-01-10 08:39:51

处理方法

  1. 登录管理控制台。
  2. 通过E CS 的主机监控功能的“内存使用率”指标,查看云服务器内存使用情况确认云服务器内存情况,详细操作,请参见查看监控指标
    • 如果内存不足,建议扩容内存或者优化内存的使用,扩容内存可参考变更规格通用操作
    • 否则,执行步骤3
  3. 以root用户登录云服务器,执行以下命令,排查message和dmesg日志。

    dmesg -T

    cat /var/log/messages
    • 如果出现如图1所示的cgroup相关报错打印,执行步骤8
    • 否则,执行步骤4
      图1 日志报错
  4. 执行以下命令,查看当前系统线程总数。

    ps -efL | wc -l

  5. 执行以下命令,将得到的两个值与步骤4查到的当前系统线程总数进行对比。

    sysctl -a | grep pid_max

    sysctl -a | grep threads-max

    • 如果当前系统线程总数接近这两个值其中一个,那么就需要对这pid_max、threads-max这两个参数进行调优。调优步骤请参考调优pid_max、threads-max参数
    • 否则,执行步骤6
  1. 执行以下命令,确定报错进程的pid。

    ps -ef | grep 报错进程名

  2. 执行以下命令,根据得到的pid检查该进程的limits配置:

    cat /proc/pid/limits

    图2 确定进程limits配置
    • 查看Max processes行,如果当前用户创建的所有线程数接近该值,那么需要对limits参数进行调优,调优步骤请参考调优limits参数
    • 否则,执行步骤8
  3. 执行以下命令,根据日志的cgroup报错可以得到pid_max、pids.current参数值。

    cat /sys/fs/cgroup/pids/拼接日志中报错目录/pids.max

    cat /sys/fs/cgroup/pids/拼接日志中报错目录/pids.current

    图3 cgroup目录

    示例如下:

    1. 执行以下命令,根据进程的pid查找对应的cgroup目录。

      cat /proc/pid/cgroup

      图4 根据pid查找对应的cgroup目录

      返回结果中的pids行为“/user.slice/user-0.slice/session-5.scope/”,与/sys/fs/cgroup/pids/拼接,可得进程对应的cgroup目录为“/sys/fs/cgroup/pids/user.slice/user-0.slice/session-5.scope/”。

    2. 执行以下命令,根据得到的cgroup目录获取pid_max、pids.current参数值。

      cat /sys/fs/cgroup/pids/user.slice/user-0.slice/session-5.scope/pids.max

      cat /sys/fs/cgroup/pids/user.slice/user-0.slice/session-5.scope/pids.current

      • 如果pids.current接近pids.max,那么需要对cgroup参数进行调优,调优步骤请参考调优cgroup参数
      • 否则,请提交工单联系技术支持处理。
support.huaweicloud.com/trouble-ecs/ecs_trouble_0373.html