标签存档: performance

一个比较有趣的性能问题排查工具

greys是一个很强大的工具,简单的一句话就是强化版的btrace. 之前遇见一个问题,就是线上查询很慢,正好通过这个工具试着诊断一下。
一 安装greys
curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh
cd greys
sh ./install-local.sh
二 诊断问题
jcmd 拿到 pid
root@hzxs-hadoop-pre-03:/data/src/greys # ./greys.sh 141930
                                                        _
  ____  ____ _____ _  _  ___ _____ _____ ____  _____ _| |_ ___  ____  _  _
/ _  |/ ___) ___ | | | |/___|_____|____ |  _ \(____ (_  _) _ \|    \| | | |
( (_| | |  | ____| |_| |___ |    / ___ | | | / ___ | | || |_| | | | | |_| |
\___ |_|  |_____)\__  (___/      \_____|_| |_\_____|  \__)___/|_|_|_|\__  |
(_____|          (____/                                              (____/
                                              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                              |v|e|r|s|i|o|n|:|1|.|7|.|6|.|6|
                                              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ga?>
查看问题:
ga?>trace com.bilibili.berserker.horoscope.biz.service.impl.HoroChannelDomainServiceImpl listChannelList
Affect(class-cnt:1 , method-cnt:1) cost in 416 ms.
`—+Tracing for : thread_name=”qtp2142442467-651″ thread_id=0x28b;is_daemon=false;priority=5;
    `—+[7371,7370ms]com.bilibili.berserker.horoscope.biz.service.impl.HoroChannelDomainServiceImpl:listChannelList()
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@38)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getPlatform(@39)
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@39)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getStartDate(@40)
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@40)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getEndDate(@41)
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@41)
        +—[9,8ms]com.bilibili.agilawood.util.BeanUtils:copy(@43)
        +—[9,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getStartDate(@46)
        +—[9,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getEndDate(@47)
        +—[9,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getSortField(@48)
        +—[9,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getSortType(@49)
        +—[7371,7362ms]com.bilibili.berserker.horoscope.dao.HoroChannelDataDAO:listChannels(@45)
        +—[7371,0ms]org.apache.commons.collections.CollectionUtils:isEmpty(@51)
        `—[7371,0ms]com.bilibili.agilawood.util.BeanUtils:copyList(@55)
发现大量的耗时在一个DAO操作上
原因是上线时候没有给查询条件加上索引导致的,添加索引后。
ga?>trace com.bilibili.berserker.horoscope.biz.service.impl.HoroChannelDomainServiceImpl listChannelList
Press Ctrl+D to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 474 ms.
`—+Tracing for : thread_name=”qtp685399117-2763″ thread_id=0xacb;is_daemon=false;priority=5;
    `—+[64,63ms]com.bilibili.berserker.horoscope.biz.service.impl.HoroChannelDomainServiceImpl:listChannelList()
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@38)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getPlatform(@39)
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@39)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getStartDate(@40)
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@40)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getEndDate(@41)
        +—[1,0ms]com.google.common.base.Preconditions:checkNotNull(@41)
        +—[1,0ms]com.bilibili.agilawood.util.BeanUtils:copy(@43)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getStartDate(@46)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getEndDate(@47)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getSortField(@48)
        +—[1,0ms]com.bilibili.berserker.horoscope.api.query.HoroChannelSimpleQuery:getSortType(@49)
        +—[64,63ms]com.bilibili.berserker.horoscope.dao.HoroChannelDataDAO:listChannels(@45)
        +—[64,0ms]org.apache.commons.collections.CollectionUtils:isEmpty(@51)
        `—[64,0ms]com.bilibili.agilawood.util.BeanUtils:copyList(@55)
一个SQL查询从7秒多降到了64毫秒。
三 总结
greys是一个不错的工具,还有其他很强大的功能,具体可见使用文档:https://yq.aliyun.com/articles/2390



阅读全文…

nio的一些特性解析

最近在回顾以前学过的知识,看到了nio,想想有必要再重新整理一下。这里说的NIO,指的是JDK1.4种的NIO,非NIO2.

阅读全文…

tigase的笔记一 — 基本的配置

基本介绍

阅读全文…

额外JAR包的加载问题

写swiftly的一个场景:需要加载非classpath路径下的jar包。其中用了spring来做容器管理,但是遇到一个问题:无法加载到自己想要的类。

阅读全文…

大数据处理概述

大数据是时下的热门话题,你不说几句大数据都不好意思出门跟人打招呼,今天就抽空理理自己对于大数据处理的理解吧。
大数据,顾名思义就是一堆非常非常大的东西丢在那边,一堆杂乱,原始的数据,然后要求我们根据自己的业务要求,抽取并分析出价值来。看起来很简单的事情吧,是的,若是时间足够的话,我们可以慢慢的处理,最简单的就是线性的,之后是就二分,树结构查找,再快点就哈希。但是,在大数据面前,简单的使用上面的手段是不能满足实际的业务要求的。只好继续探索探索。

阅读全文…

Exchanger的简单示例

在JDK5之后,提供了很多写并发程序的API,降低了我们写多线程程序的难度,大致上有:Semaphore,CountDownLatch,Exchanger,CyclicBarrier 四个!
四者中对于Exchanger相对陌生,今天突然看到,觉得有点意思,查了网上的资料,写的demo都不是很好,就写个demo玩玩,它的作用是负责两组线程间的通信问题(数据交换),很明显的一个例子就是生产者和消费者可用Exchanger来实现!具体代码如下所示吧:

阅读全文…

前端优化原则

内容主要来之雅虎的前端优化原则:http://developer.yahoo.com/performance/rules.html
对于部分内容做了解释,感觉其中的部分原则是相同的,遵循了一种一条,自然就遵循了另一条,例如第一条和第二十条,同时还有一些原则是单纯的优化而优化,大可从整体设计风格和设计原则上考虑,例如第15条。

阅读全文…

系统设计 — 性能的考量点

一般我们考量一个系统的性能如何,主要有以下这么几点:
1.响应时间:系统完成一次外部请求所需的时间
2.响应性:系统响应请求的速度有多快,这点有点偏用户体验方面,若是请求处理期间,系统一直处在等待状态,那么系统的响应性和响应时间是相等,但若是系统在接受到请求后,给用户一个提示表明自己已经接受到请求了,或是给出一个响应的进度条,那么响应性相比较之前要好些。
3.等待时间:获得系统任何响应的最小时间,例如返回一个201已经建立链接等,这个也是在做系统间服务调用时,尽量的减少远程调用
4.吞吐量:给定时间内能处理多大的请求量,一般吞吐量上升,那么响应时间都会随之下降,具体在设计时候寻找的是一个平衡。从用户角度而言,响应性比响应时间更重要,所以为了提供响应性,牺牲一些响应时间或者吞吐量是值得的。
5.负载:系统当前负荷的表述,也就是当前有多少个用户和系统相连,一般伴随着其他性能同时出现,例如在10个用户的情况下响应时间是1秒,在20用户的情况下响应时间是2秒。
6.负载敏感度:也理解为系统的衰竭指数,两个系统A,B,在10个用户情况下,A是1秒,B是2秒,但是20个用户情况下,A是10秒,B是5秒,那么A系统的敏感度比较高,也就是系统衰竭的比较快。
7.效率:性能除以资源,在一个双CPU系统的性能是20tps,一个四核系统的性能是30tps,那么就代表前者效率更高
8.容量:最大负载或是吞吐量的指标,可以是一个绝对大的值,或是性能衰竭至低于一个可接受的阀值之前的临界点。
9.可伸缩性:向系统增加资源对系统性能的影响,一般添加资源后,系统性能是有所提升的。伸缩分为两方面,垂直可伸缩性,通常指提高单个服务器的性能,加内存、CPU等操作。还有水平可伸缩性,就是添加服务器数目,我们更多讨论的是水平可伸缩性。

阅读全文…

ReentrantLock实现原理

因为ReentrantLock和ReentrantReadWriteLock的实现原理基本相同,就单看ReentrantLock。

阅读全文…

文件差、并、diff操作、pstree、iftop命令使用笔记

数据准备:
inter12@inter12-VirtualBox:/tmp/temp$ more t1
12 hi zhaoming
32 ohoh mingtian
22 jhoh mingtian
2 iehieh tomorrow

阅读全文…

Pages: 1 2 Next