在日常工作中,应用出现性能问题是不可避免的,绝大部分公司都没有专门的性能团队,出现问题还是需要我们自己去排查处理,所以掌握基本的性能知识和技能就显得很有必要,也是开发工程师进阶的必要条件,能否快准狠的定位解决问题,也是对知识、技能和能力的检验。
今天我们来讨论的问题是,服务出现明显的变慢,该如何诊断处理?
首先我们要确定服务是突然变慢还运行一段时间后观察到变慢?类似的变慢是经常出现还是偶发的?还有对慢的定义是什么?是否可以理解为系统对其他方面的请求的延时变长?
在理清楚问题的症状后,更有利于分析问题的具体原因,大概有以下思路:
接下来我们来了解一下业内广泛的性能分析方法论。方法论总结为两类:
我们重点看第一种,自上而下。各个阶段的思路以及使用的工具等。
分析系统的性能,我们常从CPU、内存和IO等入手,这几点是重点关注项。对于CPU,如果是Linux环境,可以先用top命令查看负载情况:
可以看到,平均负载的三个值并不高,也没有升高的迹象,可以先不特别关注,接下来分析最耗费CPU的Java线程,步骤如下:
利用top命令获取相应的pid,-H代表thread模式,也可以配合grep命令更精确定位。
top -H
然后转换成16进制。
printf "%x" your_pid
最后利用jstack获取的线程栈,对比相应的ID即可。也可以用vmstat,查看上下文切换的数量,比如指定时间间隔为1,收集20次
vmstat -1 -20
如果上下文切换非常高,并且系统中高很多,就表明可能存在不合理的线程调度导致的,可以用pidstat进一步分析定位。
除了CPU,内存和IO也有很多注意事项:
来源: 故里学Java
TCP和UDP都属于网络传输协议,如果要构架高效的网络应用,就应该从传输层着手,但是对于经典的浏览器网页和服务器端通信场景,如果单纯的使用更底层的传输协议则会变得麻烦。
你开发了一个服务,调用它,它做了一些事情并返回结果。那么,它需要花多长时间?为什么有时候它花的时间比用户期望的要长?在这篇文章中,我将从最基础的讲起,然后逐步介绍一些标准的术语,同时着重强调一些需要知道的关键点。
一个PortType可以包含若干个Operation,而一个Operation则是指访问入口支持的一种类型的调用。以上三种结构描述了调用Web服务的抽象定义,这三部分与具体Web服务部署细节无关
这是一个彻底无服务,易于分享的网页软件形式,它所有的内容都集中在Url数据中,所见即所得,不需要网络和注册安装,同时适配全平台,用户还能随时修改逻辑,没有的服务器成本
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!