小记:本地服务耗时和上游调用显示耗时相差过大问题排查及优化
摘要:问题 在最近一次压测时发现了一个现象:监控显示服务端p995耗时只有15ms左右,调用方的耗时却高达2000ms,二者相差巨大。 定位过程 查看cpu 查看了压测期间的cpu数据,发现cpu使用率只有20~30%,说明并不是cpu阻塞引起的调用方耗时高 查看jvm 查看了压测期间的jvm数据,发现压
阅读全文
posted @
2021-01-26 22:23
孙振超
阅读(548)
推荐(0)
一次young gc耗时过长优化过程
摘要:1 问题源起 上游系统通过公司rpc框架调用我们系统接口超时(默认超时时间为100ms)数量从50次/分突然上涨到2000次/分,在发生变化时间段里我们的系统也没有做过代码变更,但上游系统的调用确发生了变化。由于处于主要链路上,sre同学找过来询问原因,所以开始了问题排查。 2 问题初步定位 排查r
阅读全文
posted @
2017-04-14 22:42
孙振超
阅读(28195)
推荐(1)
java 非阻塞算法实现基础:unsafe类介绍
摘要:一、为什么要有Unsfae、我们为什么要了解这个类 1. java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类 2.java的并发包中底层大量的使用这个类的功能,了解这个类有助于了解java 并发包,理解为什么并发包中的类的并发性能为什么会比使用synchro
阅读全文
posted @
2017-03-13 11:14
孙振超
阅读(2221)
推荐(1)
xfire框架内部基本结构解析
摘要:1 概述xfire是webservice的一个实现框架,是apache旗下CXF的前身,是一个比较被广泛使用的webservice框架,网上有很多关于如何使用xfire或cxf的hello world案例,但是对于它是如何运行起来的介绍比较少,最近在排查问题时对xfire的代码进行了debug,因而...
阅读全文
posted @
2015-12-24 18:09
孙振超
阅读(2966)
推荐(1)
osgi: HttpService A null service reference is not allowed.
摘要:最近在学习osgi,在练习HttpService的过程中,一直出现“A null service reference is not allowed”这样的报错,代码本身没有问题,在网上也搜了不少地方,在《深入理解OSGi》、《osgi原理与最佳实践》这两本书中也没有找到具体的解决方法。万般无奈,只好...
阅读全文
posted @
2014-09-05 16:09
孙振超
阅读(2659)
推荐(0)
Java Web中涉及的编解码
摘要:用户从浏览器发起一个HTTP请求,存在编码的地方是URL、Cookie、Paramiter。服务器端接收到HTTP请求后要解析HTTP协议,其中URL、Cookie和POST表单参数要解码,服务器端可能还需要读取硬盘数据(数据库、文件),这些数据都可能存在编码问题。当Servlet处理完所有请求的数...
阅读全文
posted @
2014-08-11 15:44
孙振超
阅读(4950)
推荐(1)
web开发基础--字节序
摘要:字节是网络传输上的最小单位,是web开发中需要了解的一个知识点。1.有效位在谈字节序前需要先了解有效位,有效位分为两种:最低有效位(LSB: Least Significant Bit) 和最高有效位(MSB:Most Significant Bit)。在二进制数中,LSB是最低加权位,与十进制数字...
阅读全文
posted @
2014-05-27 13:58
孙振超
阅读(932)
推荐(0)
java 之DelayQueue实际运用示例
摘要:在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。Delayed,一种混合风格的接口,用来标记那些应该在给定延迟时间之后执行的对象。此接口的实现必须定义一个compareTo方法,该方法提供与此接口的getDelay方法一致的排序。在网上也看到两个示例,但这两个示例个人在实际运行时均没有达到满足业务场景的效果,因而对其进行了修改,供大家参考讨论。业务场景一:
阅读全文
posted @
2014-01-11 16:21
孙振超
阅读(38390)
推荐(7)
JVM之---垃圾回收
摘要:JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内存。1.收集器 通常采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪收集器。 1.1引用计数收集器 引用计数收集器采用的是分散式的管理方式,通过计数器记录对象是否被引用。当计数器为零时,说明此对象已经不再被使用,于是可进行回收。引用计数需要在每次对象赋值时进行引用计数器的增减,它有一定的消耗。另外,引用计数器对于循环引用的场景没有办法实现回收。 1.2跟踪收集器 跟踪收集器采用的集中式的管理方式,全局记录数据的引用状态。基于一定条件的触发(例如定时、空间不足),执行时需
阅读全文
posted @
2013-12-20 16:59
孙振超
阅读(2580)
推荐(0)
JVM之---Java源码编译机制
摘要:Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤: 1.分析和输入到符号表(Parse and Enter) Parse过程所做的工作有词法和语法分析。词法分析要完成将代码字符串转变为Token序列。语法分析则是根据语法将Token序列生成抽象语法树。 Enter过程将符号输入到符号表,通常包括确定类的超类型和接口、根据需要添...
阅读全文
posted @
2013-11-27 17:43
孙振超
阅读(1732)
推荐(0)
Mybatis源代码分析之parsing包
摘要:parsing,从字面上理解就是编译解析的意思,那么这个包中的内容就应该和mybatis配置文件的编译解析有关系。本文首先会按照引用层次来分别介绍这个包中各个类的作用,而后再用实际的例子解释它们是如何组合到一起去解决了什么样的问题。一、类和接口介绍1.TokenHandlerpublic interface TokenHandler { String handleToken(String content);}这个接口中只有一个函数,就是对字符串进行处理。2.GenericTokenParser从这个类的名字看到,这个类是对常用Token进行parser的类,我们首先了解这个类的属性和构造函数.
阅读全文
posted @
2013-06-28 16:15
孙振超
阅读(12442)
推荐(1)
Java代码质量检查工具汇总
摘要:最近在研读Mybatis的源代码,发现其官网上列出了几个报告,这几个报告都是关于Mybatis代码质量的:http://mybatis.github.io/mybatis-3/project-reports.html因而百度了相关的资料:JDepend http://www.blogjava.net/hengheng123456789/archive/2007/01/30/96675.htmlFindBugs http://www.cnblogs.com/hyddd/archive/2009/02/13/1390362.htmlSurefire http://www.dotlife.info/
阅读全文
posted @
2013-06-14 18:50
孙振超
阅读(3525)
推荐(0)
Mybatis源代码分析之包间依赖介绍(一)
摘要:通常而言,作为一个系统中的类、接口和注解,或多或少都会被该系统中其他的类、接口或者注解所引用,相互间存在着被我们称为继承、实现、组合、关联、依赖等关系。但是有时出于系统版本的迭代升级,一些类、接口和注解慢慢的不再被系统中的其他类所调用;或者是其提供的功能相对独立,与系统中其他类、接口和注解没有关系。一个正式商用的系统中的类文件没有上万也有数千个,但如何才能发现这些类间的关系?难道要一个一个查看吗?答案当然是不!这里要提到 JDepend 这个开源的工具,如果对这个工具没有不够熟悉,可以查看:http://blog.csdn.net/zhengsj/article/details/4148117
阅读全文
posted @
2013-06-14 17:00
孙振超
阅读(2343)
推荐(0)
Java @Deprecated注解的作用及传递性
摘要:一、作用用 @Deprecated注解的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。二、传递性如果一个类被使用了@Deprecated注解,在调用这个类的地方IDE会给出提示。但如果调用这个类的字类IDE会进行提示吗?从实验结果看是不会的。因为采用编辑器插入代码时不会像IDE那样出现提示,这里采用截图,有兴趣的同学可以做下实验。
阅读全文
posted @
2013-04-15 17:31
孙振超
阅读(31526)
推荐(2)
Jenkins+Maven+SVN快速搭建持续集成环境(转)
摘要:Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们是如何几分钟就快速搭建一个持续集成环境吧。假设我们目前已经有2个maven项目:entities(JAVA类库),web(Web应用,依赖entities)。一、安装Jenkins地址http://mirrors.jenkins-ci.org/下载适合的Jenkins版本。Windows最新稳定版的Jenkins地址为:http://mirrors.jenkins-ci.org/windows-stable/jenkins-1.409.1.ziphttps://wiki.jenkins-ci.or
阅读全文
posted @
2013-01-30 16:44
孙振超
阅读(152815)
推荐(9)