java多线程程序性能调优 优化过程

有句话叫“只要推力大,板砖也能飞上天”, 那换到我们it, 只要cpu强大,那么再烂的程序也能跑的飞快,但是cpu肯定是不够强大的,她是不够用,不然也就没多核心,分布式什么事情了,那java中我们如何找出我们的代码中的多线程瓶颈呢,比如这个线程当前在干什么?哪个线程的cpu 占用了100%了?哪个线程当前正在等待锁?

下面主要用的命令有两个top 以及jstack
在命令行输入top 后我们看到如下内容
这里写图片描述

找到需要调优的进程id 24207 (ps:不会top 命令的自行百度去),
执行命令 top -H -p 24207 看到如下内容
这里写图片描述

这个命令上面显示的pid 就是物理的线程id,只是命令显示成了pid, 这个阶段我们就以及进入了一个java进程的内部, 可以看到每一个线程使用的cpu了, 比如18827就是一个线程, 它占用1% 的cpu, 如果理论上1% 是会跑到100%的, 那现在为什么只跑到1%?, 我们针对现在情况进行分析, 那现在就要用到我们另外一个工具 jstack 了;
执行命令sudo jstack 18798 > /tmp/jstack.log 在文件中我们找到nid=0x498b(线程ID 18827的16进制)

这里写图片描述

神奇吧, 居然发现了调用堆栈, 我们的线程居然在睡觉,这么懒得线程它的cpu 肯定上不去只有1%也就不奇怪了, 那查下为毛在睡觉吧.修改好了就能上天上100%的了!
百万qps不再是梦啊!

猜你喜欢

转载自blog.csdn.net/qq994406030/article/details/73741947