故障分析
文章平均质量分 50
axman
有寂寞陪着,我就不会寂寞。
展开
-
command "jps -v" no details.
jps -v no details ls /tmp/hsperfdata.admin/total 0 no pid file check cron script,found sysc delete tmp file operate.原创 2011-02-18 10:36:00 · 1492 阅读 · 0 评论 -
NIO中几个非常重要的技术点
这些都是在实践中踩过雷的,今天某应用再次踩雷,把遇到的几个雷都收集一下,给后来者参考。1.即使是accept事件,没有真正的read和write,Channel也要关闭,否则unix domain socket会被泄漏(WINDOWS更可怕),因为NIO的每个Channel上都有两个FD用来监听事件(接收和发送走不同的FD)。2.cancel事件导致CPU占用100%,http://bugs.su原创 2011-11-23 12:11:46 · 5917 阅读 · 0 评论 -
JBOSS内容错乱的分析过程
现象: 在线服务的应用在发布一个应用后突然出现用户帐号串号现象,这个问题的严重性完全是重大事故级。对于商业网站简直是致命的,线上在出现问题的时马上进行了回滚。对出现问题的用户进行手工修正数据等善后工作。分析: 因为之前基本没有这个情况(说基本没有,是据说一年前出现过这样的一次情况,因为只出现过一次而且是一年前的,当时怀疑有可能是网络接入层的数据缓存)。就因为一个应用发布突然出现大量(对原创 2010-06-25 15:45:00 · 3772 阅读 · 6 评论 -
一个异步io中同步调用close造成数据传输不完整的bug。
某个使用netty作为server通讯,应用在传输大一点的数据时就会出现org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 29869; received: 15846。经过仔细分析,原来在接收数据时,程序员显式关闭了连接(同步调用)原创 2013-01-08 11:09:33 · 11583 阅读 · 8 评论 -
UseAdaptiveSizePolicy 选项引起Memory pool not found异常。
Memory pool not found异常是mbean的异常,所以出现这个异常一定是使用了mbean.开始怀疑的情况是JVM还没有初始化,agent中的mbean已经开始获取状态,或者JVM将要crash之前,mbean获取不到正确状态,但都没有这些情况 。后来taobao-jdk团队进行分析,原因出在UseAdaptiveSizePolicy上。大概原因:在使用cms算法下,如果开启参数Us原创 2013-03-13 11:09:53 · 5586 阅读 · 3 评论 -
FireFox的上传请求bug,一次提交,请求两次,其中一次是get.
public void execute(Context context, @Param("mapdata") FileItem mapdata) throws IOException { brc.setBuffering(false); ResponseMsg rm = new ResponseMsg(); try { byt原创 2013-11-08 11:22:17 · 3612 阅读 · 1 评论 -
GC时间过长导致channel心跳失败而close,io崩溃。
一个以web方式向外提供图象比检测的服务,开始设计时大约每日8万左右的访问量,部署两台虚拟机做集群(以FORM方式上传图片的http访问不可能象普通http请求那样性能高。因为网络带宽的限制)。上周因为一特殊业务有上千万请求一下子过来(业务方事先未通知服务),一下子把服务打挂。开始分析原因时发现依赖的远程服务没有注册成功,以为是因为反复注册不成功导致初化化服务不做重做而造成大量FGC。但是看一下其原创 2013-11-26 15:15:09 · 5922 阅读 · 0 评论 -
freeradius增加Access-Challenge支持
freeradius默认的逻辑不支持Access-Challeng,只在特定auth-type中Access-Challeng,在auth.c中 只对request->proxy_reply包进行处理,所以你在普通逻辑中如果想返回Access-Challeng必须增加逻辑:jradius中: RadiusPacket reply = new原创 2014-02-14 19:12:30 · 5049 阅读 · 4 评论 -
重大疑难故障分析日志(已经解决)
故障现象:三个不同的应用,每个应用都是N台服务器的集群。从两周前出现一个非常奇怪的现象,每天从11:20开始,到下面的几个点的20分,如12:20,13:20,14:20,15点20.一直到某个点结束,每个点的20分都是会发生数据库连接暴涨,把有数据库请求的方法进行拦截,很多方法原创 2011-09-14 16:28:38 · 1784 阅读 · 1 评论 -
tomcat的webappclassloader中一个奇怪的异常信息
如果一个应用抛出大量的Class not found信息,一般你会怀疑包冲突。可是tomcat的webappclassloader却有这样的问题:如果一个应用发布出现问题, webappclassloader的started属性被设为false.然后其它线程如果继续使用webappclassloader进行class load,则大量的Class not found异常被抛出: 1391原创 2014-06-18 15:31:20 · 6666 阅读 · 0 评论 -
大量数据更新导致fgc频繁引起jvm服务暂停。
线上跑的几台服务器突然出现大量fgc,由于在fgc过程的stop the world太久,引起其它应用访问该服务器上的接口大量超时。(发生超时的时间点和fgc时间点一致)先进行初步的优化。方案:修改CMSInitiatingOccupancyFraction=85这个调低到60,加快cms gc处理防止concurrent mode failure触发FGC, 减少CMSMax原创 2014-07-11 10:58:06 · 6220 阅读 · 0 评论 -
JVM hang时,Eden区100%,所有线程包括gc线程被 blocked分析
jstat -gcutil pid 1000 S0 S1 E O P YGC YGCT FGC FGCT GCT 5.68 36.18 100.00 1.50 11.93 14 0.555 0 0.000 0.555 5.68 36.18 100.00 1.50 1原创 2014-08-14 11:05:11 · 11144 阅读 · 1 评论 -
分析一个bug,竟然还被误导
现象: 现上一个应用在使用css扫描时经常出现cpu被吃掉的情况 ,一会吃掉一个核,一会吃掉一个核 。分析肯定是某种条件下触发了死循环或大量耗时cpu操作。于是用jstack拿到线程栈:直接定位到270行:第一印象是循环问题,但是进入this.nextChar()后发现,有一个buf是动态扩容的: public int nextChar() throws IOException { c原创 2015-03-09 16:00:21 · 3180 阅读 · 0 评论 -
优化之误!
如果在jvm启动时load飙高,然后逐渐正常的情况 ,我们经常会怀疑到 JIT 编译的问题。增加启动时编译的核心数肯定是一个有效的解决办法,但是这个参数在启动时设置后,如果正常运行时不需要这么多核来工作,你又不能在jvm已经启动的情况下动态降低这个参数。所以使用-XX:+TieredCompilation进行分层编译,可以缓解这个问题,事实上也有很多case使用这个参数解决了jvm启动时load飙原创 2015-07-20 14:38:49 · 3393 阅读 · 0 评论 -
太奇葩了,bouncycastle这样的重要包竟然出现这种重构
这是bouncycastle.provider-1.38-jdk15.jar中定义的。这是bcprov-jdk15on-1.52.jar 中定义的。好吧,现在应用加载了。直接:没有什么好说的,只能说是奇葩!原创 2015-09-08 12:52:26 · 8999 阅读 · 3 评论 -
YGC越来越慢的原因分析
http://www.atatech.org/articles/51137#不知道从外部能否访问到,非常经典的分析,思路,工具用得确到好处。转在这里,记录一下。转载 2016-03-14 10:45:34 · 1517 阅读 · 1 评论 -
JVM参数配置的线上教训
原来规则处理业务五十台服务器经常大量fgc,load飙高,我修改了jvm配置后,五十台服务器十多天没有任何异常,双十一中轻闲度过。可是今天突然又有一台大量fgc,load飙高。分析了半天,回头一看,配置脚本漏推了。唯 一这一台漏推,唯有这一台异常。因为都是消息处理,处理完消息立即就扔了,集群维护人员把young设置为最大堆的一半:-Xms4G -Xmx4G -Xmn2G这样除掉Perm, Old原创 2013-11-14 17:13:29 · 2211 阅读 · 0 评论 -
关于http post两阶段提交的一些问题
之前一些应用经常会出现请求超时而引起用户体验极度下降,我们每个应用都会做用户体验的优化。当然有很多其它原因,但是对于POST的两阶段提交引起的访问超时也发生过好几次,而且基本无解,只能修改实现方式,尽量减少传输的数据以便改用GET方式。 有不少浏览器厂商对于POST的提交采用两阶段发送数据,特别是IE系统列的XMLHttpRequest对象,所以在IE浏览器上用AJAX提交POST的数据,是按两个原创 2012-06-14 14:36:00 · 7684 阅读 · 8 评论 -
一个java crash的故障分析过程
一个应用在周五出现java进程消失,没有任何日志。先查看/var/log/message中无oom_killer信息,所以只能拿core。该应用是一个集群,通知他们将出现crash的服务器上打开ulimit,等待生成core文件 。今天周一,下午应用负责人紧急找我,说同时出几台crash了。开了ulimit参数的那台服务器coredump已经生成。登录到该服务器上,先是gdb $JAVA_HOME原创 2012-07-09 22:35:50 · 10958 阅读 · 4 评论 -
What dose "%...D The time taken to serve the request, in microseconds." mean?
apache log的%D到底包含什么时间? 一.现象:apache + mod_jk + jboss环境, jboss的处理时间和apache log中的处理时间总是相差很大,jboss的时间是用框架记录从request进入到请求结束的时间,对于一个特定的URL,时间基本在原创 2010-07-22 09:20:00 · 2205 阅读 · 4 评论 -
一个性能瓶颈分析的过程。
前段时间公司打造了自己的WEB开发框架新版,性能比以前的两个版有很大提高。在性能基准测试时,某个测试的业务场景为18000个TPS左右。但是后来增加了session序列化模块后,一下子下降低到6000个TPS左右,就是因为这个模块性能一下子降低三倍。 jvisualvm监视查看到其中的加密方法占用了47%的CPU处理时间,于是重点测试这个方法。 这个方法做了三件事。1.加密,2.压缩,3.base原创 2010-05-14 14:20:00 · 30928 阅读 · 9 评论 -
这样的错误竟然能得到正确的值,这个bug藏的够深的。
为了统计方法执行时候,我用ASM在方法开始的时候插入一个变量startLocal记录开始执行的时间,然后在结束的时间用当前时间去差这个开始时间,为了调试,我同时又插入了一个endLocal /** * Project: dragoon-common-2.5.3 *原创 2011-05-08 18:32:00 · 2297 阅读 · 3 评论 -
一次load飙高的故障分析过程
这个故障已经过去好多天了,但是还是要记在这里以供别的兄弟参考。 现象: 应用服务器正常服务期间,load突然飙高,但是看访问日志却发现不了异常,应用支持的架构师说访问量没有任何异常。 分析: load突然飙高,要么瞬间访问量突然加大,要么原来的事务中依赖的资源原创 2011-04-27 08:27:00 · 2370 阅读 · 0 评论 -
又遇img src=""的问题。
尽管这个问题有过n次教训。但是监控开发这两天再次被该问题折磨。他们不知道折腾了多久,找到了我。 一个帮助页面,浏览过后session就会丢失,需要重新登录。而其它页面就没有这个问题。首先这个页面是一个静态页面,所以怀疑其中有js改写成cookie引起session丢失,但是搜索发原创 2011-04-25 09:44:00 · 4599 阅读 · 3 评论 -
昨天应用方再次发生session引起的内存溢出,两台机器当机,血的教训。
以前介绍大规模互联网应用时,session曾经作为单独的一条特别特别地提出来。为什么,因为它和数据库连接消耗资源,而且,基本上入门+1级的程序员都知道要关闭数据库连接,而session管理却是极少有人关注。"企业级"应用再怎么大也不会大过10万级用户,而互联网应用这种动辄上亿规模原创 2010-11-17 10:55:00 · 2505 阅读 · 1 评论 -
OSSCE脚本引发的重大问题,记在这里以示警戒
今天发生的一件大事,早上9点多,在线服务的机器有一半不能访问了。结果查看大多数的java进程被杀死,jboss服务器停掉。也有的机器其它服务被停止。 最初怀疑是被入侵了。因为同时发生状态一致的宕机,除非是时间BUG,否则如何那么多机器都同时停止(已经排除人为操作原因)。 最后和安全部门联系,是否有统一的操作,结果他们反映地那个时间段统一停止了安全模块OSSCE,但它为什么会导致JAVA应用和其它服原创 2009-07-10 14:52:00 · 2042 阅读 · 2 评论 -
CopyOnWriteArrayList引发OOM
正常一年多的一个服务突然在23号出现异常,响应最快的竟然达到60几秒。apache与jboss之间大量连接超时。看异常日志,发现竟然有一个新上的Servlet出现OOM。review该Servlet,发现竟然用了一个CopyOnWriteArrayList来存放大量写和读和临时数原创 2011-09-27 14:29:41 · 2551 阅读 · 0 评论 -
cache-control和zip压缩引起的在IE6下js和css失效
线上服务的主要页面在IE6下竟然不能显示CSS,这是一个重大故障。于是查原因,先用httpwatch查看页面引用的CSS,可以正确下载,但是在页面中却没有起作用。搜索查找到IE6有这样一个BUG,在使用可压缩方式输出并且不使用缓存的情况下,CSS不能被解释,包括JS。查看我们输出CSS的服务器输出头域,确实是你不用压缩方式输出,并且头域中确实输出了cache-control:no-store的选项原创 2011-10-22 11:34:42 · 2041 阅读 · 1 评论 -
AJAX调用慎用POST方式,有严重的问题或者BUG
这个问题只存在客户端是IE或IE内核的情况,但是你无法控制客户端使用什么浏览器,所以仍然会给你的应用造成很大的性能问题。我们先说现象:服务端:我们只用一个静态的HTML页面ok.html,内容只返OK.然后我们写一个ajax调用的html在客户端访问:function send_request(method,url,param) { http_request = false;原创 2011-11-24 16:36:28 · 5091 阅读 · 0 评论 -
一个可以上bug榜top 100的的的的bug.
某应用的代码:StringBuilder param = new StringBuilder(urlPara.getPropertyId());作者的原意是拿一个ID构造一个StringBuilder打算和后边的其它字符串连接,结果这个urlPara.getPropertyId()返回的是int.当ID长度是9位时,一下子分配100多M的内存,当长度更大时直接OOM。StringBuilder变成原创 2011-12-20 09:10:55 · 2331 阅读 · 5 评论 -
jetty发布一个令人头疼的问题。
之前的应用迁移一直没有问题,突然发现一个应用从JBOSS迁移到JETTY出现BEAN注册错误,提示BEAN已经注册,存在两份配置文件。查看路径是war中存在一个xml,/tmp/jetty-xxxxx/webinf/WEB-INF/classes下也有一个。但是之前的应用为什么不冲突呢? 经驼比较原来之前的应用要么是放在WEB-INF下的,要么是应用先打成jar包放在WEB-INF/lib/下,x原创 2011-12-22 11:10:18 · 1492 阅读 · 0 评论 -
make a apache core file
ulimit -c unlimitedulimit -c output: unlimitedvi the httpd.conf,add "CoreDumpDirectory current _user_home",defaultly the corefile will dump to "/",this directory owner is root.restart the httpd.acce原创 2012-01-16 17:36:39 · 1936 阅读 · 0 评论 -
web应用出现400响应的分析
一个应用上出现400响应码的请求增多,基本达到了千分之一,应用方请求我们分析原因。首先看日志,检查400请求的ip的其它请求是否正常,排除伪造请求的攻击行为。发现用户的User-Agent分布正常,ip分布正常。所有400请求的响应内容都是226字节,说明服务器返回给用户的内容是固定的。400错误是用户请求错误,用户请求格式错误的原因基本可以分为两种,一种是因为网络通讯造成数据残缺,一种是违反了约原创 2012-02-17 11:18:42 · 6966 阅读 · 1 评论 -
一个load飙高的过程分析,非常有价值。
ae的多语言应用中不断出现load飙高的情况 ,即使重启过10几个小时以后,cpu慢慢从1核到4核到被吃光。而且集群中8台机器都是如此,所以应用方自己开始开分析原因。前两天跟踪没结果,后来有一位同学根据tb达人的分析中得到启发:关于us高和ys高的问题分析:当us值过高时,表示运行的应用消耗大量的CPU。java应用造成us高的原因主要是线程一直处于可运行(Runnable)状态,通常这些线程原创 2011-12-27 11:50:52 · 11920 阅读 · 5 评论 -
线上诊断一个load很高的问题
从监控系统中发现某集群的load很高,分析到最后发现是大量的disk io引起的。于是优化了上传的组件不写临时文件 ,发现io还是很高。再测试,竟然是apache的默认filter被改变后触发了mod_proxy的写临时文件的条件,由于apache是写死在代码中的无法配置,于是将filter重新注册为apache默认的protocol类型,临时文件没有了,dosk io直接下降n倍。然后参断的几个原创 2012-05-23 15:38:58 · 3038 阅读 · 0 评论 -
nginx配置的大坑proxyPass
很多情况下我们都是proxyPass http://mydomain/path/xxxx但是这样会存在一个问题,这个mydomain后面的实际机器ip或vip发生变化时,nginx仍然会向原来的ip/vip转发,除非重启nginx。正确的做法是: set $host mydomainproxyPass http://$host/path/xxxx这样在mydomain对应的ip/vip发生变化原创 2017-12-20 16:16:11 · 5955 阅读 · 0 评论