1、总结系统限制有:
cat /proc/sys/kernel/pid_max #(操作系统线程ID的最大值)系统支持的最大线程数
(sysctl kernel.pid_max)
cat /proc/sys/kernel/thread-max #表示内核所能使用的线程的最大数目
cat max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程
cat /proc/sys/vm/max_map_count #单进程mmap的限制会影响单个进程可创建的线程数
硬件内存大小
线程初识:
https://mccxj.github.io/blog/20171230_os-thread-limit.html
http://jzhihui.iteye.com/blog/1271122
https://github.com/0xAX/linux-insides/blob/master/Initialization/linux-initialization-10.md
https://www.cnblogs.com/bass6/p/7102524.html
2、Java虚拟机本身限制:
-Xms #intial java heap size
-Xmx #maximum java heap size
-Xss #the stack size for each thread
3、查询当前某程序的线程或进程数
pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l
或
pstree -p 3660 | wc -l
启动项目时会报 unable to create new native thread 就要注意线程问题了,如果有启动多个tomcat 要分开查询
4、查询当前整个系统已用的线程或进程数
pstree -p | wc -l
5、修改pid_max的值:
临时生效
[root@666 ok]# sysctl -w kernel.pid_max=60000
kernel.pid_max = 60000
[root@666 ok]# sysctl kernel.pid_max
kernel.pid_max = 60000
永久生效
[root@666 ok]# echo 'kernel.pid_max=99999' >>/etc/sysctl.conf
[root@666 ok]# sysctl -p
kernel.pid_max = 99999
其他查看线程的命令:
1、 cat /proc/${pid}/status
2、pstree -p ${pid}
3、top -p ${pid} 再按H 或者直接输入 top -bH -d 3 -p ${pid}
top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
4、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
5、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程后的线程数。