java应用监控之利用cat接口性能优化,每一次都是血的教训

05/25 16:10 java程序员思维

之前几篇文章对cat进行了简介、安装部署、代码埋点,今天分享一下如何利用cat帮助我们做接口优化。

为什么要接口性能优化?

1.用户体验差:接口访问速度慢、如果一个页面打开需要好几秒,用户可能在页面没有完全打开时,就关掉页面离开了,造成用户流失,通过性能优化,减少服务器响应时长,可提高用户体验,较少用户的流失。

2.雪崩效应:接口访问速度慢,会带来雪崩效应,在微服务时代,一个功能页面可能需要调用多个服务接口,如果某一个接口响应速度慢,会导致调用这个接口的服务也变得很慢,最后会导致所有的服务整体变慢。

什么样的接口值得优化?

1.调用频繁且调用时间长的接口,值得优化。接口a被调用10000次,平均调用时长500ms,接口b被调用10次,平均调用时长3秒。优化接口a,假设从500ms优化到300ms,每一次节省200ms,总体优化时长是200万毫秒。优化接口b,即使从3秒优化到100ms,总体优化时长也只有29000毫秒。碰到这种情况建议优化接口a,性价比更高,更值得优化。

2.调用次数少,但每次调用都异常(如超时无返回),这样的接口也必须优化。

如何使用cat定位需要优化的接口?

挑选性价比高的接口(Transaction)

如上图选择的是cache-service应用,CacheService.mutliExecute调用最频繁,调用72万次,调用时长也比较多,可以作为被优化的接口。

2.通过条件筛选,提供Long-url、Long sql、Long sevice、Long call筛选条件,可以自行组合,调整时间长度。(Promblem)

3.调用出错,必须要修改处理(promblem)

接口如何优化?

查看调用链,定位哪个方法调用时间长

通过上图,发现接口存在循环调用,优化方案:调用批量操作接口,减少接口调用次数。

2.慢sql优化方法

第一步:explain查看sql执行计划,确认sql是否走索引。

第二步:确认数据库表是否建立索引,如果没有索引,创建合适的索引,保持最左原则。

第三步:如果存在索引,没有索引,分析其中原因

第四步:如果sql走了索引,依然很慢,缓存中间结果(异构一张中间表或者将结果缓存到redis中)

具体优化例子:

1.查询库存接口,数据库表存在索引,而没有使用到索引,是因为数据库表属性类型是varchar,sql中使用了in,然而传参的时候使用的是数值类型,导致发生了数据类型转换,导致没有走索引。优化方案,修改传参类型,使用字符串进行传参,优化之后从300ms降低到60ms。(如果数据库中是数值类型,参数使用字符串类型,即便发生了类型转换,依然可以走索引,很奇怪)。sql中使用in,作为多条件查询,有时候能走索引,有时候不能走索引,当in中只有1个值的时候,一定会走索引,当in中查询的结果,达到所有记录的一定比例的时候,不会走索引。

2.大表分页优化,定时任务,需要对大表分页查询,可以使用子查询的方式进行优化。举例:商品表100万条记录,需要每天定时更新商品的销量。一般做法使用多线程,每个线程处理200条数据

select * from item limit 900000,200

越往后执行,时间会越长,因为mysql需要定位前90万条记录,之后再取出后面的200条数据,因为没有走索引,所以会比较慢。

优化方案一:利用子查询

select * from item i,(select id from item limit 900000,200) as g where g.id = i.id

因为可以走索引,而且子查询使用到了覆盖索引,不需要进行第二次查询,可以提高查询速度。

优化方案二:主键Id区间法

前提条件表结构中存在自增长主键。取出表的最小值和最大值,将这两个值进行分段,每个线程处理一个区间。这样查询可以利用主键索引。

select * from item where id in (1,2,3,4,5,..200)

3.Jvm优化

查询库存优化之后,走了索引之后,的确快了很多,通过cat发现,库存服务有两个应用实例,有一个实例接口非常快,一个很慢,通过cat的Heartbeat发现慢的那台机器存在full gc,每隔一段时间就发生一次fullgc。

查看jvm的Gc命令

jstat -gcutil pid 2000

如果存在大量的YGC可以通过jmap命令定位哪些对象创建的多,然后进行代码优化,尽量减少对象的创建。或者调整jvm参数,增加Eden区的大小。如果存在大量的fullGC这种情况要引起注意,因为一次fullGC会消耗时间比较长,严重影响性能,需要调整jvm参数。

jmap -histo pid | grep com.galaxy(包路径)

top命令查看cpu,内存等使用情况

top

cpu使用过高优化方案

首先显示线程列表:

ps -mp pid -o THREAD,tid,time

找到了耗时最高的线程28802,占用CPU时间快两个小时了!

其次将需要的线程ID转换为16进制格式:

printf ''%x\n'' tid

最后打印线程的堆栈信息:

jstack pid |grep tid -A 30

无法获取数据库连接

可能是因为数据库在执行修改表结构造成了锁表

select * from information_schema.processlist where db = 'item' and state like '%lock%'

需要对查出来的进程进行kill掉。可以通过命令

kill 进程Id

获取redis连接失败,可能存在某些地方没有释放连接,可通过jstack命令进行定位

jstack –l pid > jstack.txt

下载jstack.txt进行分析,搜索Lock关键词,可以方便定位问题。最好的方法,对连接的操作,进行统一的封装,不留给开发人员犯错的机会。

遇到问题不可怕,可怕的是同样的问题重复犯。将开发过程中遇到的问题,记录下来,总结定期复盘,可避免重犯同样的错误。吃一堑,长一智,特此记录下来和大家分享,希望对你有所帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容