Linux最大线程数限制及当前线程数查询

Linux最大线程数限制及当前线程数查询
1、总结系统限制有4个因素:
cat /proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值
sysctl -w kernel.pid_max=655350 #修改pid最大值
echo 100000 > /proc/sys/kernel/pid_max #修改pid最大值,这两种方式都可以

cat /proc/sys/kernel/threads-max 默认值
echo 100000 > /proc/sys/kernel/threads-max

max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程

cat /proc/sys/vm/max_map_count #该值除以2即为最大线程数,
echo 131072 > /proc/sys/vm/max_map_count

硬件内存大小
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
4、查询当前整个系统已用的线程或进程数
pstree -p | wc -l
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
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。

问题:
too many open files
too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。
命令ulimit -a
查看 open files数量

使用命令lsof -p 进程id可以查看单个进程所有打开的文件详情,使用命令lsof -p 进程id | wc -l可以统计进程打开了多少文件:

以裸启动的tomcat为例,可以看到它目前打开了108个文件数,如果文件数过多使用lsof -p 进程id命令无法完全查看的话,可以使用lsof -p 进程id > openfiles.log将执行结果内容输出到日志文件中查看。

解决方法
ulimit -n 2048
这样就可以把当前用户的最大允许打开文件数量设置为2048了,但这种设置方法在重启后会还原为默认值。

修改系统配置文件
vim /etc/security/limits.conf
#在最后加入

  • soft nofile 4096
  • hard nofile 4096
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值