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

我, 一多年c++开发,由于项目原因需要对一个性能底下的多线程java程序进行调优,百度google了几把,妈蛋,没有发现指导如何java线程调优的文章啊,都是一些java使用规范,我去,那我大java的开发工程师都是怎么调优的啊, 那我大C++工程师就带领大家如何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不再是梦啊!


推荐个代码, json 格式化在线网站:www.format123.com  点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值