欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

在Linux上查看活跃线程数与连接数,简介现如今,有两种常

来源: javaer 分享于  点击 9949 次 点评:54

在Linux上查看活跃线程数与连接数,简介现如今,有两种常


原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。

简介

现如今,有两种常见的软件资源几乎成了Java后端程序的标配,即线程池与连接池,但这些池化资源非常的重要,一旦不够用了,就会导致程序阻塞、性能低下,所以有时我们需要看看它们的使用情况,以判断这里是否是瓶颈。

查看活跃线程数

在Linux上,通过top -H -p 1命令,可以查看java进程的线程情况,其中1是java进程号,如下:

如上,可以看到线程的名称、CPU使用率等,其中http-nio-8080-e就是Tomcat线程池中的线程,tomcat线程全名类似于http-nio-8080-exec-20,由于Linux中线程名称有长度限制,所以被截断了。

注:jdk8的话,需要jdk8u222以上版本,才能在top中看到线程名称。

我们数一下http-nio-8080-e线程的数量,发现它有20个,正好对应上了在springboot中的线程配置。

这样能通过top得到线程池的线程数量了,但如何了解线程池的使用情况,即活跃线程有多少个呢?

经过查看man文档,我发现top命令有一个-i选项,描述如下:

意思就是i是一个开关选项,默认会显示全部线程,而打开此选项之后,就只显示活跃线程了!

所以,只需要利用-i选项,再配合sed/awk/uniq等文本处理命令,即可以统计出活跃线程数了,如下:

$ top -H -i -b -d 1 -n2 -p 1 | awk -v RS= 'END{print $0}' | awk '$1 ~ /[0-9]+/{print $12}' | sed -E 's/[0-9]+/n/g' | sort | uniq -c


可以看到,20个线程的线程池中,在1秒内只有4个线程是活跃的,线程池中线程数量是足够的。

这个命令脚本就不展开解释了,也不复杂,有linux命令基础的将命令依次拆开执行,应该能Get到脚本逻辑,没学过linux命令的话,就直接拿去用吧

相关栏目:

用户点评