`
文章列表
线上应用的故障排查能力是一个高级软件开发人员的必修课,也最能体现一个技术人员的工作经验和能力。所以,这也是我面试别人的一个必考题目之一。 我打算把自己在这方面的实际经验写成系列文章,主要包括下面这些内容:   1、线上应用故障排查之一:高CPU占用 2、线上应用故障排查之二:高内存占用 3、线上应用故障排查之三:高I/O占用,包括磁盘I/O、网络I/O、数据库I/O等。 4、线上应用故障排查之四:程序僵死 敬请期待! (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)
最近的一个线上项目(认证服务器)老是出现服务延迟的情况。具体的问题描述: (1)客户端发送一个请求A(长连接),在服务器端的业务层需要20秒以上才能接收到。 (2)客户端发送一个请求B(端连接),在服务器端的业务层可以迅速接收到。 从现象大致知道问题出在服务器端的网络接收层,大量通过长连接发送过来的请求都堵塞在网络层得不到处理(在网络层排队,还没到应用层)。 (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)   后来经过排查,发现是Netty中的OrderedMemoryAwareThreadPool ...
前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。 搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异 ...
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。 (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。 通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢? 首先显示线程列表: ps -mp pid -o THREAD,tid,time ...
Netty是一个高性能的NIO通信框架,提供异步的、事件驱动的网络编程模型。使用Netty可以方便用户开发各种常用协议的网络程序。例如:TCP、UDP、HTTP等等。 Netty的最新版本是3.2.7,官网地址是:http://www.jboss.org/netty 本文的主要目的是基于Netty实现一个通用二进制协议的高效数据传输。协议是通用的二进制协议,高效并且扩展性很好。 一个好的协议有两个标准: (1)生成的传输数据要少,即数据压缩比要高。这样可以减少网络开销。 (2)传输数据和业务对象之间的转换速度要快。 (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://ww ...
从毕业到现在已有两年,最近对Java服务器开发很感兴趣。这一块对性能要求比较高,不像之前从事的Web开发。涉及的技术也比较广泛:多线程、网络编程、NIO等等。个人觉得要想深入理解这些知识,必须研究相关开源项目的源代码。请大家推荐一到两个,一起学习下。
Linux下Memcached安装步骤详解 (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)1.         首先下载memcached 和 libevent 包。 Memcached用到了libevent这个库用于Socket的处理。下面是下载的两个包文件:
 (友情提示:本博文章欢迎转载,但请注明出处:陈新汉,http://www.blogjava.net/hankchen)  jQuery提供了简单而强大的选择器功能,同时对Ajax操作也给出了很好的支持。在Ajax方面,jQuery除了提供底层的jQuery.ajax()方法外,也提供了下 ...
(友情提示:本博文章欢迎转载,但请注明出处:陈新汉,http://www.blogjava.net/hankchen)一、并发集合类的选择     同步的集合类Hashtable和Vector,以及同步的包装器类Collections.synchronizedMap和Collections.synchronizedList,为Map和List提供了基本的有条件的线程安全的实现。然而,某些因素使得它们并不适用于具有高度并发性的应用程序中――它们的集合范围的单锁特性对于可伸缩性来说是一个障碍,而且,很多时候还必须在一段较长的时间内锁定一个集合,以防止出现ConcurrentModification ...
最近看到一道面试题,比较有意思: 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC… 由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步。 线程同步有两种基本方法: (1)    synchronized (2)    wait,notify,notifyAll 现在分别采用这两种方法来解答这道题目。 /** * @author陈新汉 http://www.blogjava.net/hankchen
  Web-Harvest是一个Java开源Web数据抽取工具。它能够收集指定的Web页面并从这些页面中提取有用的数据。其实现原理是,根据预先定义的配置文件用httpclient获取页面的全部内容(关于httpclient的内容,本博有些文章已介绍),然后运用XPath、XQuery、正则表达式等这些技术来实现对text/xml的内容筛选操作,选取精确的数据。前两年比较火的垂直搜索(比如:酷讯等)也是采用类似的原理实现的。Web-Harvest应用,关键就是理解和定义配置文件,其他的就是考虑怎么处理数据的Java代码。当然在爬虫开始前,也可以把Java变量填充到配置文件中,实现动态的配置。 ...
先简单介绍Decorator 模式(装饰模式)的内容和应用场景。 装饰模式可以动态地给一个对象添加额外的职责。虽然,利用子类继承也可以实现这样的功能,但是装饰模式提供了一个更灵活的方式。因为继承会为类型引入的静态特 ...
先简单介绍Template Method模式的内容和应用场景。 Template Method模式也叫模板方法模式,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。 在作为抽象类的父类里,定义了一个具有固定算法并可以细分为多个步骤的模板方法(public),Template Method模式把这些可以被细分的可变步骤抽象为可以被子类重载的抽象方法(protected abstract),并通过在子类中的重载(重新定义),做到无需改变模板方法的算法步骤而可以重新定义该算法中的某些特定的步骤。 Template Method模式的 ...
        刚刚看完《重构与模式》这本书,收获很多。确实有该书序言所说的“打通重构与模式任督二脉”的感觉。 设计模式的书籍看过不少,从经典的GOF的《设计模式》、《设计模式解析》,到《Java与模式》,再到《Head First Design Pattern》等等。 重构方面的书看过《重构:改善既有代码的设计》。但是,《重构与模式》这本书的收获最大。 《重构与模式》一书,最大的特点是:例子详细,并且都是来源于真实的项目(例如:Junit测试框架,HttpParser等),而不是那么玩具代码。 由于Junit和HttpParser,在开发过程中经常用到,所以,感觉这些例子很亲切,实用价 ...
   本文采用 HttpClient 来模拟站点的登录发帖回复,介绍 HttpClient 的用法和常见问题的解决方案。 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供支持 HTTP 协议的客户端编程工具包,模拟浏览器的行为。它提供了很多的方法来简化网络的访问,虽然大部分的功能可以使用较底层的 java.net.HttpURLConnection 来实现。例如: 实现了所有 HTTP 的方法( GET,POST 等) 支持 HTTPS 协议 支持代理服务器 自动维护 Cookies 等 
Global site tag (gtag.js) - Google Analytics