性能排查怎么玩
2020-07-05 18:43:48 0 举报
AI智能生成
仅供参考
作者其他创作
大纲/内容
性能排查怎么玩
3. 熟悉各类性能问题
前言:对于性能问题,我主要分两大块来描述性能问题的点
3.1 宕机问题
前言:都知道宕机是客户最不愿意发生的,但是很多客户又无法避免此类问题,也是属于紧急问题,我来聊聊宕机出现的缘故,在我们开发过程中,可能由于业务场景设计不规范,或者开发不规范,在大的业务查询中,以java为例子,会产生很多的大的对象,这些大的对象有一种机制叫做jvm垃圾回收是可以专门负责回收内存资源的,避免资源被浪费,不断的大对象在内存中,时间久了不释放,或者释放不掉,整个系统无法运转了,结果就是宕机了,各种请求,操作无法进行下去;或者CPU很高,降不下来,也可能导致宕机;还有可能是数据库连接池满了,一直释放不掉,也会导致宕机,所以引出三类
JVM内存溢出
内存急性溢出
内存慢性溢出
数据库连接池满
连接泄漏
卡数据库执行sql
CPU爆炸
莫名奇妙挂了
3.2 性能问题
前言:介绍了宕机后,不宕机的问题也会出现,并且要么卡,要么慢,要么功能不可用
系统整体很慢
经常慢
系统的部分功能慢
偶发慢
其他情况
4. 性能排查常用工具使用
运维平台
下载地址
https://www.weaver.com.cn/cs/monitorDownload.asp
常规体检
检查是否开启了web访问的日志
依赖于本地的sqlserver
resin的jvm配置
是否配置了重复过滤器
重复过滤器的影响:会产生重复请求,产生如界面重复、返回多次数据等影响
日志分割功能
在resin.conf配置文件中配置了日志分割功能;对日志进行分割,便于日志信息的管理,包括ecology和resin中的日志
Oracle RAC序列检查
在系统使用多数据的情况下保证数据的同步
虚拟内存检查
Windows服务器必须配置虚拟内存路径:控制面板\\所有控制面板项\\系统\\高级系统设置\\高级\\性能\\设置\\高级\\虚拟内存
运维平台-->常用工具中下载的日志介绍
线程日志收集profiler
线上访问
访问地址:IP:port/profiler/profiler.jsp线上版:E9版本自带线程分析工具profiler,E8及以下版本可通过压缩包到ecology进行使用可以使用一个浏览器分别登陆一个账号,另一个开启profiler进行抓取
线下访问
MAT工具
连接池Pool
访问地址:IP:port/pool.jsp可以快速的定位连接泄露问题,找出执行慢的SQL语句
sql缓存
访问地址:IP:Port/commcache/cacheMonitor.jsp?isCache=1开启之后需要加大jvm内存1~2G(3550改为5550)详情见:http://192.168.7.57/kl/#!page/performs/snow.md
autoJStack
E8整体优化方案
开启sql缓存
全局加索引
indexSql.jsp
http://192.168.7.57:8080/kl/#!page/performs/snow.md
resetLog.jsp
optCheck.jsp
jsp整体编译
1.了解性能排查是什么?
概念:计算机系统的资源主要包括font color=\"#c41230\
2. 熟悉产品以及日志
2.1 熟悉产品?
Resin
前言:如果你使用过Tomcat,写过简单的jsp+servlet页面或者开发,知道这些一定是要有个web服务器进行支撑,那么Resin和Tomcat一样,作为web服务器的一种,我们可以称为容器,也可以称为中间件。只不过我们目前的开发可能不经常使用Resin,但是多熟悉熟悉就好了。
Resin官方解释: (1)Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的、 (2)Resin也可以和许多其他的WEB服务器一起工作,比如Apacheserver和IIS等。Resin支持Servlets2.3标准和JSP1.2标准。熟悉ASP和PHP的用户可以发现用Resin来进行JSP编程是件很容易的事情。
Ecology
介绍完Resin,谈谈Ecology,ecology是生态的意思,象征着oa产品的生态化,已经形成了一个生态圈(这点培训的话会有讲到),我们oa中主要的产品是ecology,ecology的运行少不了web容器,也就是上面说的Resin,ecology中大多数是用jsp写的,这个和后面的性能日志是有联系的,先提及,后面再详谈。(所以Resin+Ecology如果你真的不方便理解,就当成Tomcat+你的项目即可)
2.2 熟悉日志?
前言:想要进行性能分析,如果对产品都不了解,别谈看日志,如果连日志的地方都不知道,那么我给你介绍介绍,先混个脸熟,第一遍不需要深刻了解,要结合实战,后面接触多了就明白。
2.2.1 日志简介
对于ecology的日志,主要在ecology/log下
对于Resin下的日志,主要在resin/log和resin/logs下
resin/log
日志
resin/logs
这些成果,属于架构部所有的人给我的指点和分享,尤其是架构部大佬的脑图和借鉴+武器库的知识,如有不足或者缺陷,及时提出哈!
5. 案例分享和排查思路介绍
案例一:内存急性溢出
某客户提交问题流程描述:内存溢出
此时我们脑海中要考虑的,是内存相关的知识,可能导致内存溢出的原因:1. 大对象不断的创建,不能被回收,或者类似字符串的追加,引起内存的慢性溢出;2. 在某个时间段,内存极速的升高,这是急性溢出的表现,产生原因可能是在这段时间内存由某个非常大的对象不断创建,不断添加,jvm没能及时触发垃圾回收,并且也回收不了,因为是一个持续的过程,场景有,大量数据报表的导出,文档的大文件上传,下载,大量的文档的转换操作等;
拿到日志去运维平台分析
观察线程日志
案例二:内存慢性溢出
某客户提交问题描述:早晨启动,晚上宕机
通过运维平台分析内存的上涨趋势是慢速的上涨,并到达某个临界点就宕机,一般是90%以上就会宕机,前面分析过,慢性溢出无法通过线程日志看出来,线程很快的运行,而内存增长是个缓慢的过程,不能一眼定位线程在做的事情是内存慢慢增长的过程,所以我们只能取dump日志用MAT工具分析
dump结果
案例三:cpu高
某客户提交问题描述:cpu异常高
通过给出的日志中cpu.log,观察有某个时间段,cpu增长非常快,于是取到这段时间的线程日志,通过分析cputime,可以全局搜索正则表达式
观察cpu的时间,虽然不能很准确的定位问题产生的点,因为有可能因为其他任务导致这些线程运行的cpu时间很久,可以想象,如果当某个任务或者某个功能占用cpu高,所有的其他任务,cpu的等待时间也会很久,所以先分析cpu高的可能点:由堆栈信息可以看出大量的线程阻塞到socket读的地方,推断可能是由于网络延迟或TCP服务连接后没有响应造成 java.net.SocketInputStream.socketRead0一直阻塞等待读取,再继续看,我们可以看到很多地方出现了getConnection,而getConnection后面没有连接释放等操作,大概率卡在和数据库的连接上了
引发思考:1. 什么原因导致卡在连接上的?2. 卡连接会导致cpu高吗?
解答:1. 原因导致卡连接的有如下情况:(1)网络在那一刻延迟严重 (2)数据库压力很大,导致连接数据库做操作的时候,数据库响应时间很久,连接会一直保持不释放,这样的情况,有可能会造成连接池溢出,或者连接池接近满的状态
主要分析第二种情况:数据库压力大体现在,cpu高的阶段,数据库在执行大量的sql导致,或者跑某些大的定时任务,导致数据库压力很大,这个时候如果是oracle数据库,可以取awr在cpu高的时间段内的报告(sqlserver暂时不清楚),看看是否有大sql一直在运行;此类问题不方便重现的情况下,要尽量找到历史原因,一个一个因素排除掉,首先要排除的是数据库在那时刻的压力,如果数据库正常,我们再想着是不是网络延迟导致的,网络延迟的问题,可以通过脚本ping出记录,如果oa和数据库服务器分开部署,且是linux,可以通过两台机子测试网络状况,见标签;所以卡连接导致cpu高的原因,是因为cpu调度分配线程,线程要去做很多工作,这些工作如果都在一直在运行状态且卡着无法执行下去,cpu肯定会高;所以,导致cpu高的因素,实际上你就只要发现某个任务,某个线程只要一直卡着做某个事情,这个事情无法得到cpu合理的调度,并且cpu一直在处理这个事情,无果,cpu就很大概率会高上去,但是反之,cpu高,并不一定会引起其他的都高,具体的要具体分析。
总结:遇到问题,虽然会产生各种疑问,但是不要害怕,一个一个来解决,解决问题的方式=产品的熟悉+经验
0 条评论
下一页