- 浏览: 68245 次
- 性别:
- 来自: 杭州
最新评论
文章列表
1. 背景
有时,线上集群load会突然飙升,无法响应正常请求。
那么引起load飙升的线程究竟在做什么?哪些线程霸占了CPU?可以通过top和jstack命令进行定位。
2. 定位步骤
1. 使用终端1进入目标机器,执行top命令,默认是进程视图,其中PID是进程号,截图如下:
在这里,我们只能看到java进程占用CPU达到115%,那么究竟是那些线程非常耗CPU呢?
2. 由于我们要看到线程,在终端1,按下“H”键或者“shift+h”,top视图会切换到线程视图
今天看了一篇枚举的总结,非常好,推荐给大家:http://www.iteye.com/topic/1116193
工作中,枚举的使用比较多,也踩过一些雷。说说我对枚举的理解:预先定义类型的一组常量(对象),并且该类型也仅有这样一组常量(对象),运行过程中,无法new出新的对象,从而,方便程序引用该对象。
新的收获:
所有的枚举都继承自java.lang.Enum类,由于java无法支持多继承,因此,枚举只能interface。
踩过的雷:
在使用到反序列化的场景中,如果服务端新增一种枚举实例,而客户端没有更新,这种情况下会导致反序列化失败。
mat是一款jvm内存模型分析工具,是排查jvm内存泄露/溢出问题的利器,功能非常强大。它能够列出对内存的对象列表,实例个数,类个数,classloader,shallow size和retain size等等。
另外,mat能够生成leak report,帮助你分析可能存在的问题。前段时间,线上发生一次jvm内存泄露的故障,当时排查了很长时间才定位问题。后来,在研究mat时,发现leak report能够准确的定位到问题,真是......
mat有Stand-alone版本,也有eclipse plaugin版本。我比较喜欢使用stand alone版本,推荐大家使用。官网地址:http ...
Reference from : http://www.yourkit.com/docs/java/help/sizes.jsp
YourKit Java Profiler is capable of measuring shallow and retained sizes of objects.
Shallow size of an object is the amount of memory allocated to store the object itself, not taking into account the referenced objects. Shall ...
一. 背景
写代码和线上维护时,调试功能是必不可少的,经常在应用程序启动脚本中看到如下配置:
JAVA_DEBUG_OPT=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9108,server=y,suspend=n "
这几参数中,对address相对熟悉一点,因为线上要修改端口号,而其他几个参数就不知道什么意思了。今天深入学习了一下,分享给大家。
二. 每个参数的含义
-Xdebug
让jvm在调试模式下运行,必须开启。
- ...
今天在启动应用时一直报错,如下:
2013-07-25 20:16:21,422 [] ERROR parser.XMLParser - Parse Fatal Error at line 211 column 122: The reference to entity "op" must end with the ';
' delimiter.
org.xml.sax.SAXParseException: The reference to entity "op" must end with the ';' delimiter.
at org.a ...
经典,使用JDBC连接数据库,共五个步骤(曾经作为进入公司的面试题):
一. 加载JDBC驱动程序
二. 创建数据库连接
三. 创建一个Statement对象
四. 执行Sql语句,处理结果
五. 关闭JDBC对象,关闭连接
一. 加载JDBC驱动程序
连接数据库之前,首先要加载数据库的驱动程序类到jvm,使用java.lang.Class.forName实现。实例
try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}c ...
今天在看代码时,发现这样一段配置:
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:sqlmap.xml</value>
</property>
</bean>
打开org.springframewor ...
平时类图画的比较少,每次都忘记类图的关系,为了画图“更专业”,特记录一下常用的类图关系
1. 泛化(Generalization)
关系:类与类之间的继承关系。
箭头指向:带三角箭头的实线,箭头指向父类。
2. 继承(Realization)
关系:类与接口的关系,类实现了接口的所有特征和行为。
箭头指向:带三角箭头的虚线,箭头指向接口。
3. 依赖(Dependency)
关系:类与类之间的关系,一个类的实现需要另外一个类的协助。
代码实现:局部变量、方法参数
箭头指向:带箭头的虚线,箭头指向被使用者。
4. 聚合(Aggregation ...
一. JVM爆栈
爆栈是JVM Crash的一种案例,意思是JVM 的栈满(StackOverFlow),使得方法无法获取栈空间,而导致应用crash。爆栈是StackOverFlow的一种,只不过上层调用的是本地方法,才有可能导致出现crash,而非Native方法,则会直接抛出StackOverFlow OOM错误。
如果要分析JVM Crash的原因,需要结合Core文件可以定位导致Crash的代码。
注:在一个程序崩溃时,linux一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。
二. TradeCenter JV ...
一、问题
有一次线上系统运行过程中,爆出更新数据库死锁的异常,联系DBA排查原因:在批量更新库存时,发生死锁。
二、解决方案
对调用DAL API的参数List进行排序,保证获取资源的顺序一致,从而避免数据库死锁,于是就有了这篇blog。
三、利用java.List.Collections对List排序
1. 待排序的POJO类,OfferSaleItemStatDAOUpdateParam.java:
public class OfferSaleItemStatDAOUpdateParam {
/**
* 排序条件1
*/
...
又到了一年一度的晋升考核时间,最近两天在听很多同学的晋升演说,有些感想:
1)没有必要把这些当成考试,不用紧张。好多平时熟悉的同学紧张得声音都变了,说话频率也变了。俗话说,关心则乱,把晋升面试看的太重,容易失常。眼光更长远些,成长是一个长期的过程,如果真到了,这次不升,下次也必然会升, 说难听的,再不升你,你不会炒了老板啊。 晋升不成,最多只是一段时间,少拿点钱而已,只有自己的成长才是最实在的,未来有无数机会,大家都是年轻人,真的不用看太重。
2)眼光要高些,不要盯着自己手头的工作来讲。人要学会面对三种事情:眼睛里看的,心里想的,手里做的,这三层的事情应该是不一样的, 眼睛里看到的东西, ...
http://somebody-hjh.iteye.com/blog/726086
一、基本语法
1、"#"用来标识Velocity的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等; 如: #if($info.imgs) <img src="$info.imgs" border=0> #else <img src="noPhoto.jpg"> #end
2、"$"用来标识一个对象(或理解为变量);如 如:$i、$ ...
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。
这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下
Quartz在Spring中的动态定时,发现<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean" >
<property name="j ...