linux 查看进程有多少线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 查看进程有多少线程相关的知识,希望对你有一定的参考价值。
有些时候需要确实进程内部当前运行着多少线程,那么以下几个方法值得一用。1.根据进程号进行查询:
# pstree -p 进程号
# top -Hp 进程号
2.根据进程名字进行查询:
# pstree -p `ps -e | grep server | awk 'print $1'`
# pstree -p `ps -e | grep server | awk 'print $1'` | wc -l
这里利用了管道和命令替换,
关于命令替换,我也是今天才了解,就是说用``括起来的命令会优先执行,然后以其输出作为其他命令的参数,
上述就是用 ps -e | grep server | awk 'print $1' 的输出(进程号),作为 pstree -p 的参数
管道和命令替换的区别是:
管道:管道符号"|"左边命令的输出作为右边命令的输入
命令替换:将命令替换符"``"中命令的输出作为其他命令相应位置的参数 参考技术A top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。
1.$ top -H
3
要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:
$ top -H -p <pid>
Linux下一个进程可以开多少线程
这个问题,整理了一下网上的资料,结果如下:
一、ulimit -n可以查看一个进程最多可以打开多少文件描述符数;
二、一个进程最多可以产生多少线程,可用如下的方法:
32位linux系统最大内存地址4G,0-3GB的给用户进程(User Space)使用,3-4GB给内核使用
stack size (kbytes,-s)10240表示线程堆栈大小,3G/10M=最大线程数,
但实际会比这个数小一点,因为程序本身占内存,还有些管理线程,
可以使用ulimit -s来设置stack size,设置的小一点开辟的线程就多。
同时,
/usr/include/bits/local_lim.h中的PTHREAD_THREADS_MAX限制了进程的最大线程数
/proc/sys/kernel/threads-max中限制了系统的最大线程数
查看公司的服务器:
限制数为: 2^19
实际测试结果:2^16
三、最靠谱的方法还是自己写程序测试的结果
#include<unistd.h> #include<stdlib.h> #include<pthread.h> #include<stdio.h> void* foo(void* param) { } int main() { int i = 0; pthread_t thread; while (1) { if (pthread_create(&thread, NULL, foo, NULL) != 0) break; i ++; } printf("i = %d\n", i); }
编译命令如下:
g++ main.cpp -o main -lpthread
执行结果:
[[email protected]]# ./main i = 32747
以上是关于linux 查看进程有多少线程的主要内容,如果未能解决你的问题,请参考以下文章