linux下查看线程数的方法及超过系统线程最大值的报错

  1. 通过/proc伪文件系统
    说明:
    Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
    基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。
    为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。
    大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。

    ##查看线程数的方法
    cat /proc/{pid}/status
    其中Threads后面跟的就是线程数。
    或者:
    ls /proc/{pid}/task | wc -l
    ##举例如下
    cat /proc/27587/status
    Threads:    3
    或:
    ls /proc/27587/task |wc -l
    3
  2. 使用top命令
    ##top命令后面跟-H,会打印出所有线程列表
    top -H
    top -H -p {pid}
    ##举例如下
    top -H -p 27587
    Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie
    PID  USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    27587 siterec   20   0 1007m  79m  4772  S    1.7       0.2          203:34.71   python
    2753 siterec     20   0 1007m  79m  4772  S    0.0       0.2          2:19.32       python
    27590 siterec   20   0 1007m  79m  4772  S    0.0       0.2          0:00.00       python
  3. 使用ps命令
    ##ps 后面加上H,能打印某个进程的所有线程
    ps hH p {pid} | wc -l
    ##举例如下
    PID TTY      STAT   TIME COMMAND
    17721 pts/1    Sl     0:00 /usr/java/jdk1.8.0_60/bin/java -Djava.util.logging.config.file=/mnt/deploy/apache-tomcat-8.0.35/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoader
    17721 pts/1    Sl     0:00 /usr/java/jdk1.8.0_60/bin/java -Djava.util.logging.config.file=/mnt/deploy/apache-tomcat-8.0.35/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoader
    17721 pts/1    Sl     0:00 /usr/java/jdk1.8.0_60/bin/java -Djava.util.logging.config.file=/mnt/deploy/apache-tomcat-8.0.35/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoader

    使用ps命令来查看进程的时候,进程状态分别对应的含义如下:
    D 不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
    R 正在运行或可运行(在运行队列排队中)
    S 可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
    T 已停止的 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
    W 正在换页(2.6.内核之前有效)
    X 死进程 (未开启)
    Z 僵尸进程 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
    < 高优先级(not nice to other users)
    N 低优先级(nice to other users)
    L 页面锁定在内存(实时和定制的IO)
    s 一个信息头
    l 多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)
    + 在前台进程组

  4. 使用pstree命令
    ##打印所有进程及其线程
    pstree -p
    ##打印某个进程的线程数
    pstree -p {pid} | wc -l
  5. 超过系统最大线程数
    ##报错信息:
    -bash: fork: retry: 没有子进程
    -bash: fork: retry: 资源暂时不可用
    ##解决方法:
    cat /etc/security/limits.d/20-nproc.conf
    或:
    cat /etc/security/limits.d/90-nproc.conf
    \*            soft      nproc       1024   // 将此处修改成unlimited或者其他数值
    root       soft      nproc     unlimited

原文地址:http://blog.51cto.com/wutengfei/2096943

时间: 2025-01-03 00:54:35

linux下查看线程数的方法及超过系统线程最大值的报错的相关文章

Linux下查看内存使用情况方法总结

Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内存是其中最重要的一方面.自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况.下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法. 1. /proc/meminfo 查看RAM使用情况最简单的方法是通过/proc/meminfo.这个动态更新的虚拟

linux 下查看网速的方法 (不需要安装任何软件)

sudo watch -n 1 "/sbin/ifconfig eth0 | grep -E \"字节|数据包\"" 若是英文版linux: sudo watch -n 1 "/sbin/ifconfig eth0 | grep -E \"bytes|packets\"" 也可以不抓packets sudo watch -n 1 "/sbin/ifconfig eth0 | grep bytes"

解决Linux 下server和client 通过TCP通讯:accept成功接收却报错的问题

今天在写简单的TCP通讯例子的时候,遇到了一个问题:server 和client能够连接成功,并且client也能够正常发送,但server就是接收不到,在网上搜索一番后,终于解决了问题.在这里整理如下: 大家要注意的是,一个server端可以连接多个client端,server端的accept()函数负责等待并接收client的连接请求,而且accept()函数将不同client端的sockfd作为返回值.为了保证接收到对应的client端数据,所以在client连接成功且使用recv()函数

Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数

文章转载:http://blog.snsgou.com/post-793.html 1.查看物理CPU的个数 [[email protected] ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l1 2.查看逻辑CPU的个数 [[email protected] ~]# cat /proc/cpuinfo |grep "processor"|wc -l4 3.查看CPU是几核(即,核心数) [[em

linux下查看用户及用户组的方法

whois 功能说明:查找并显示用户信息. 语 法:whois [帐号名称] 补充说明:whois指令会去查找并显示指定帐号的用户相关信息,因为它是到Network Solutions 的WHOIS数据库去查找,所以该帐号名称必须在上面注册方能寻获,且名称没有大小写的差别.    whois功能说明:查找并显示用户信息.语 法:whois [帐号名称]补充说明:whois指令会去查找并显示指定帐号的用户相关信息,因为它是到Network Solutions 的WHOIS数据库去查找,所以该帐号名

linux 下查看系统内存使用情况的方法

在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在linux系统如何查看内存使用情况呢?下面和大家分享在Linux 下查看内存使用情况的free命令: [[email protected] tmp]# free total used free shared buffers cached Mem: 3266180 3250004 16176 0 110652 2668236 -/+ buffers/cache: 471116 2795064 Swap: 2048276

Linux 下查看某一个程序所使用的内存方法介绍

Linux 下查看某一个程序所使用的内存方法介绍 在 Linux 上进行开发和运营维护的时候,免不了要查看某一个程序所占用内存的情况.常用方法总结如下(注意第四种方法): 第一种:ps -aux | grep process_name 举例如下:现打算监控/usr/bin/sshd所占的内存,首先需找到pid,然后使用top进行有目标的监控,RES即为内存值,见下两图: top -p 1231,截图如下:    第二种:top -p pid 查看程序的情况 如上图所示! 第三种:cat /pro

查看linux下的内存条数 &nbsp;

1.内存条数: dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 2.内存最大容量: dmidecode|grep -P 'Maximum\s+Capacity' 3.内存频率: dmidecode|grep -A16 "Memory Device"|grep Speed 查看linux下的内存条数

Linux下查看Apache的请求数

在Linux下查看Apache的负载情况,以前也说过,最简单有有效的方式就是查看Apache Server Status(如何开启Apache Server Status点这里),在没有开启Apache Server Status的情况下,或安装的是其他的Web Server,比如Nginx的时候,下面的命令就体现出作用了. ps -ef|grep httpd|wc -l命令#ps -ef|grep httpd|wc -l1388统计httpd进程数,连个请求会启动一个进程,使用于Apache服