加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

为何服务器QPS上不去?Java线程调优权威指南

发布时间:2019-07-16 16:20:21 所属栏目:外闻 来源:今日头条
导读:副标题#e# 从刚问世起,Java 的部分魅力就来自其多线程。即便在多核和多 CPU 系统司空见惯之前,能够轻松编写多线程程序也是 Java 的一个标志性特征。 Java 性能方面的吸引力显而易见:如果有两个 CPU 可用,那么一个应用能够完成的工作量可能是原来的 2 倍

人们很容易认为,连续快速地抓取多个栈转储信息,就能将其用作一个简单快速的分析器。毕竟,采样分析器本质上就是这么工作的:周期性地探测线程的执行栈,基于这些信息推断在方法上花了多少时间。但是在安全点和不一致的快照之间,这么做不是很有效;通过查看这些线程栈,有时可以从较高的层次上大概获知执行成本较高的方法,但是一款真正的分析器提供的信息要精确得多。

从线程栈可以看出线程阻塞的严重程度(因为阻塞的线程已经在某个安全点上)。如果有连续的线程转储信息表明大量的线程阻塞在某个锁上,那么就可以断定这个锁上有严重的竞争。如果有连续的线程转储信息表明大量的线程在阻塞等待 I/O,则可以断定需要优化正在进行的 I/O 读操作(比如,如果是数据库调用,应该优化 SQL 执行,或者是优化数据库本身)。

Jstack 的输出有个问题,即不同版本之间可能会有变化,所以开发一个健壮的解析器比较困难。不能保证这个解析器可以不加修改地应用于你所使用的特定的 JVM。

jstack 解析器的基本输出像下面这样:

为何服务器QPS上不去?Java线程调优权威指南

解析器聚合了所有的线程,可以显示处于各种状态的线程分别有多少。8 个线程正在运行(它们碰巧正在获取栈轨迹信息,这个操作成本非常高,最好避免)。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读