祖传代码“慢”的解决

祖传代码对我的折磨还没有完。啥啥不让装,profiler之类的想都别想,只有用最原始的命令行来解决。

有一天,客户把我们这边的大领导怼得不行了,这边的领导让我帮着看一下这个技术问题。

现象:

就是有时候会再现用户登录的时候,非常的“慢”,当然这个慢是用户描述的,感觉像卡着了。

第一步分析:

这是个测试环境,资源分配的是比较少,但是不应该撑不住,但是本着严谨一点的态度,还是先排除了出问题的时候,CPU并不高 top -Hp,并且业务线程和GC的CPU也使用不高。

第二步 看看thread stack呗

 我没有机器的权限是同事帮忙执行的执行jstack。。。。提示命令不存在。。。这个时候我问了一下才知道是JDK是jrocket 1.6

这个时候我从后台日志看到都是数据库链接是closed掉 的,我说先解这个问题吧,

可是客户那边权限控制得很严,怎么办呢

只有dump内存中我找到了一点数据库连接池的线索,DBCP的,我说这个好像没有配置连接池的检查吧。 给加上去了

可是又继续发现生产上没有,原来生产是用weblogic,测试环境用的是TOMCAT

好嘛,先解决这个链接被closed掉。

第三步, 第二天一跑,没有链接被closed掉了。

但是客户又吐槽卡住了,我看了一下jrocket(我也没用过这玩意),看到有jrcmd命令,这不就是jcmd么,于是通过jcmd 下载到了线程log

于是分析了一拨,发现

看了一下源码,这玩意都在synchronized等待呢,

先查查这把锁是谁占了吧

 

占锁的地方在

 

  首先evictor根本不应该占有锁嘛,我找了高一点的1.4版本看了一下(当然这个也很老了2010年的)已经去掉了这把锁。

   于是上了新的版本。 但是这里本质上还有个问题,就算去掉了这个,但是上面这个还是oracle关闭链接的时候卡住了,这个问题才是本因,触发了别人多持有大范围的锁的BUG而已.

  只有先上上去了,看看能不能解决掉,但是本质上感觉链接也不多,但是生产和测试环境之间的似乎不太稳定,得排查网络和oracle的服务了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值