首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
我是个废物呀
电子科技大学 Java
发布于四川
关注
已关注
取消关注
@已注销:
在Linux上查看活跃线程数与连接数
简介现如今,有两种常见的软件资源几乎成了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命令的话,就直接拿去用吧😅查看活跃连接数在Linux上,使用ss -natp|grep pid=1可以查看1号进程的TCP连接,如下:比如若redis数据库端口是6379的话,那么可这样查看redis连接池中连接数量,如下:$ ss -natp | grep pid=1 | awk '$5~/:6379$/' | wc -l20复制代码可见当前有20个redis网络连接,那同样的,其中有多少个是活跃的呢?经过查看man文档,发现ss中也有一个-i选项,如下:可以发现,添加-i选项后,ss会输出tcp连接中的一些额外信息,其中lastsnd表示最后一次发送包到当前所经历的毫秒数,lastrcv表示最后一次接收包到当前所经历的毫秒数。有了这个信息后,就可以通过awk过滤出lastsnd或lastrcv小于1000的tcp连接,这些连接即是1秒内活跃过的连接了,因此我又编写了如下命令脚本。$ ss -natpi | sed '1!{N;s/\n//;}' | grep pid=1 | awk -v t=1000 'match($0,/lastsnd:(\w+) lastrcv:(\w+)/,a) && (a[1]<t || a[2]<t) && match($4,/(.+):(\w+)$/,s) && match($5,/(.+):(\w+)$/,d) && s[2]>=32768{print d[2]}' |sort |uniq -c |sort -nk2 8 80 3 3306 7 3307 6 6379 1 7916复制代码如上,可以看到各连出端口的活跃连接情况,其中80是http连接池端口,3306与3307是MySQL主从库的连接池端口,6379是redis连接池的端口。这是java应用主动连出连接的活跃情况,那调用方连入java应用的呢?其实只需要稍微调整一下awk脚本即可,如下:将s[2]>=32768调整为s[2]<32768,其中32768是Linux默认的临时端口号的分界线,可通过sysctl net.ipv4.ip_local_port_range查询,本地端口号大于这个值,代表是连出连接.将print d[2]调整为print s[2],和上面条件联合起来,输出的就是本地监听端口了.调整后,效果如下:$ ss -natpi | sed '1!{N;s/\n//;}' | grep pid=1 | awk -v t=1000 'match($0,/lastsnd:(\w+) lastrcv:(\w+)/,a) && (a[1]<t || a[2]<t) && match($4,/(.+):(\w+)$/,s) && match($5,/(.+):(\w+)$/,d) && s[2]<32768{print s[2]}' |sort |uniq -c |sort -nk2 8 8080复制代码可以发现,我们服务的8080端口,1秒内活跃过的连接数是8个。注:只有当调用方也使用连接池时,这种方法获取到的活跃连接数才是准确的,若调用方使用短链接的话,则不准确。arthas查看活跃线程数与连接数通过上面的方法,已经可以查看活跃线程数与连接数了,但有些情况下,会丧失一些细节,如下:top中的线程名会截断,如果不同线程池的线程名前16字符一样,则在top中无法区分。ss中是通过端口来区分线程池的,但http服务的端口号基本都是80或443,所以不同域名的http服务的连接池无法区分。若需要分辩这些细节,还是要深入到jvm里面来,而arthas就是一个不错的工具,它的vmtool命令能够获取指定类型的Java对象,并从Java对象中获取信息。以springboot为例,获取内置tomcat线程池的活跃情况,如下:# --action getInstances:表示获取对象实例# --classLoaderClass:指定类加载器# --className:指定要获取哪个类的实例# --express:指定ognl表达式,用来从对象上获取信息[arthas@1]$ vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.apache.tomcat.util.threads.ThreadPoolExecutor --express 'instances.{ #{"ActiveCount":getActiveCount(),"LargestPoolSize":getLargestPoolSize(),"CorePoolSize":getCorePoolSize(),"MaximumPoolSize":getMaximumPoolSize(),"QueueSize":getQueue().size(),"ThreadName":getThreadFactory().namePrefix }}' -x 2复制代码上面其实就是通过vmtool工具,获取到了tomcat的线程池对象,然后调用线程池的getActiveCount()等方法,获取到了活跃线程数🙄要获取连接池的活跃情况,也一并呈上吧,如下:# 获取druid连接池的使用情况[arthas@1]$ vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className com.alibaba.druid.pool.DruidDataSource --express 'instances.{ #{"url":#this.getUrl().split("\\?")[0], "username":#this.getUsername(),"PoolingCount":#this.getPoolingCount(),"ActiveCount":#this.getActiveCount(),"MaxActive":#this.getMaxActive(),"WaitThreadCount":#this.getWaitThreadCount(),"MaxWaitThreadCount":#this.getMaxWaitThreadCount()} }' -x 2# 获取httpclient连接池的使用情况[arthas@1]$ vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.apache.http.impl.conn.PoolingHttpClientConnectionManager --express 'instances.{ #pool=#this.pool.routeToPool.values() }' -x2复制代码可以看到,arthas真的很方便实用,对于Java Boy来说,值得好好研究研究👍👍👍
点赞 2
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-01 11:35
武汉工程大学 汽车设计
陕汽研发设计面经
专业:机械 宣讲会第二天发邮件线下面试 两个面试官一个综合面,一个专业面 1、自我介绍 2、城市选西安的原因 3、为什么来陕汽 4、有没有对象 5、项目相关内容 6、对应公司相关岗位的技术问题 反问 1、培养方案 2、候选人看重点 面试官回复说宣讲会都有提到,尽量避免提问宣讲会内容。。
查看6道真题和解析
点赞
评论
收藏
分享
10-01 11:42
门头沟学院 嵌入式软件开发
理想汽车嵌入式软件开发
1、自我介绍 2、介绍过往经历,遇到的困难,怎么解决的 3、引用计数什么时候加减 4、struct和class的区别 5、常用的智能锁有哪些 6、图像格式怎么转换的 7、芯片移植做了哪些配置修改 8、图像清晰度有处理吗,图像锐化怎么实现 9、用的哪个C++版本,智能指针了解吗 10、shared指针能实现线程安全吗 11、生产消费模型怎么实现的 12、学校的项目做了哪些工作,有什么创新 13、反问
查看12道真题和解析
点赞
评论
收藏
分享
09-09 16:34
苏州城市学院 嵌入式工程师
苏州双非二本简历求拷打
🎓学历背景:双非二本👨💻意向职位:嵌入式软件📍求职类型:实习/秋招🔑遇到的问题:无人在意
无实习如何秋招上岸
点赞
评论
收藏
分享
09-04 00:09
珠海艺术职业学院 贸易跟单
请给我offer
AC鸽想进大厂:
你是我见过最美的牛客女孩
点赞
评论
收藏
分享
10-02 12:25
富特科技_项目软件工程师(准入职员工)
富特科技内推, 富特科技内推码
笔试面试岗位:电子工程师线下面试主要分为技术面+hr面技术面主要是根据做过的项目进行提问,由于本人做的LLC相关的,面试官主要针对LLC提问技术面问题:(1)自我介绍(2)说一下LLC的优势以及叙述LLC参数设计流程(3)DCX下的LLC中Lm/Lr的值对动态会不会有影响……其他问题已罗列到图中hr面试都是根据她列的提纲,和其他公司大差不差,感觉主要是聊天,没什么压力富特科技26届校招启动啦【关于富特🚗】✅ 致力于成为全球领先的新能源汽车核心零部件供应商;✅已于2024年上市(股票代码301607);✅ 研发中心位于杭州市、西安市,制造中心位于湖州安吉,在法国设有全资子公司;✅ 新能源汽车细...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
秋招一周年回过头看,庆幸自己放弃大厂选择体制内
427
2
...
字节OR美团
245
3
...
中科曙光嵌入式面经
146
4
...
可以年前面试年后入职吗?
71
5
...
秋招看重什么? 大家来做做优先级排序吧
67
6
...
小时候最想当的是很酷的店长
65
7
...
不提前实习就不给offer的公司要去吗?
56
8
...
中秋节 别卷了
54
9
...
目前实习快一个月了,但是考核没达标,三个需求只做完了一个,不知道什么时候被踢,自己真的尽力做了,下班也push自己处理出现的问题,但因为各种各样的原因做了很久才做完。现在在想要不要自己辞职准备秋招,虽
54
10
...
牛可乐国庆旅行篇-西湖
53
创作者周榜
更多
正在热议
更多
#
你的实习什么时候入职
#
306456次浏览
2122人参与
#
牛油的搬砖plog
#
112450次浏览
816人参与
#
深信服秋招来了
#
272484次浏览
2905人参与
#
金融财经春招备战日记
#
30303次浏览
166人参与
#
制造业的秋招小结
#
116342次浏览
1972人参与
#
招聘要求与实际实习内容不符怎么办
#
129895次浏览
824人参与
#
携程求职进展汇总
#
640417次浏览
4660人参与
#
你朋友圈最大的人脉是谁?
#
22648次浏览
145人参与
#
如果没找到工作,考公是你的退路吗
#
49726次浏览
398人参与
#
工作两年想退休了
#
164008次浏览
1418人参与
#
什么样的背景能拿SSP?
#
113250次浏览
404人参与
#
26届的你,投了哪些公司?
#
193743次浏览
1187人参与
#
非技术er求职现状
#
102215次浏览
672人参与
#
校招入职后的感受
#
379332次浏览
3223人参与
#
如何快速融入团队?
#
33570次浏览
280人参与
#
你在职场中沾染到的“坏”习惯
#
22296次浏览
145人参与
#
你做过哪些dirty work
#
18784次浏览
139人参与
#
听到哪句话就代表面试稳了or挂了?
#
216264次浏览
1586人参与
#
大学四年该怎么过,才不算浪费时间?
#
13577次浏览
80人参与
#
国庆假期,给大脑放个假
#
5798次浏览
48人参与
#
如果公司降薪,你会跳槽吗?
#
97972次浏览
632人参与
#
你小时候最想从事什么职业
#
124104次浏览
1924人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务