开发者

Linux中的最大线程数和句柄数详解

目录
  • linux最大线程数和句柄数
    • 最近有用户反馈登录Centos 7系统后
    • 在CentOS 7中
    • 补充
  • 总结

    Linux最大线程数和句柄数python

    最近有用户反馈登录CentOS 7系统后

    执行任意命令,报错:

    bash: fork:retry: No child processes

    bash: fork: Resource temporarily unavailable

    看到这个怀疑是系统ulimit 限制导致的。

    于是查看编程客栈 /etc/security/limits.conf 和 /etc/security/limits.d/20-nproc.conf

    #*         javascript      soft    core            0
    #*               hard    RSS             10000
    #@student        hard    nproc           20
    #@faculty        soft    nproc           20
    #@faculty        hard    nproc           50
    #ftp             hard    nproc           0
    #@studeandroidnt        -       maxlogins       4
    *       soft    nofile  327680
    *       hard    nofile  327680
    
    # End of file

    在CentOS 7中

    ulimitnproc参数限制的是用户可创建的进程和线程的总数。

    这是因为在Linux内核中,线程是通过轻量级进程(Lwp)实现的,每个线程会占用编程客栈一个进程号(PID),因此会被计入nproc的限制范围

    # Default limit for number of user's processes to prevent
    # accidental fork bombs.
    # See rhbz #432903 for reasoning.
    
    *          soft    nproc     4096
    root       soft    nproc     unlimited

    发现系统默认除了root 用户默认最多的进程+线程总数最大是4096,所以是不是用户启动了过多进程或线程呢。

    于是通过 top 以及 top -H 查看系统进程数 300+ 和线程数 4100+,发现top -H 发现用户启动了过多的线程,由此定位到了原因。

    补充

    排查用户占用的线程数可以通过如下命令获取

    1. ps

    #ps -U <username> -L | wc -l

    2. top

    #top -H

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新运维

    运维排行榜