⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 匠心零度 「零度冰炫」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

01、起因

朋友遇到个问题,我的回答是这样的:

本来以为这样就结束了,其实才刚刚进入正题;

02、问题原因定位

朋友把文件下载下来:

文件好大,这么大的文件咋统计出来是哪类线程最多呢?这就到了妥妥的文本处理内容了(关键时候这类文本命令可以帮助提供非常多的效率);

我们打开文本看看内容:

一共有 80 万行,我们来看下规律:

每个线程的开始都是" 开头,我们仅仅是需要获取线程名即可,那么就简单了,不是的" 开头都删除即可;

输入命令:
:v/"/d

之后效果:

80 万的文件仅仅只剩 6.66 万行了,每一行都是一个线程,我们需要提取线程名称进行排序:

发现规律线程名称就是"线程名称" 被(双引号包围的)

输入命令:
cat jstack.txt| awk -F '"' '{print $2}'>thread.txt

那么我们通过 awk 进行操作;

我们发现确实获取到了线程名称了,但是线程名称后面有后缀,我们需要把后缀给去掉,因为他们都是一类,等会我们还需要汇总统计的;

那么这个时候正则表达式就要起作用了,

输入命令:
:%s#\d\+$##g

执行效果如下:

接下来就简单了,进行排序,之后获取重复次数的计数即可统计了;

输入命令:
cat thread.txt|sort |uniq -c |sort -nr |head -10

效果如下:

到这里我们就基本知道是哪个线程了,接下来的事情就比较简单了,告诉朋友,朋友很快就定位解决了;

03、总结

文本类的处理,还是需要熟悉的,很多时候排查定位问题还是需要这类技能的,希望今天的这个案例可以让你有所收获

文章目录
  1. 1. 01、起因
  2. 2. 02、问题原因定位
  3. 3. 03、总结