zoukankan      html  css  js  c++  java
  • 【疑难杂症】记一次生产问题之事务超时

    现象和猜测

    我们每日日终跑批,跑批的第一步要去NFS文件系统检查信贷还款文件的标志文件,即dbas.ok文件,以便做相关账务处理,该代码使用了while(true),直到file.exist()返回true之后才break

    我们是每天晚上9点钟定时跑批,有时候dbas.ok文件来得比较迟,比如第二天的零点之后才来。第二天我们就发现批量还一直还停留在这一步。

    照理说文件虽然姗姗来迟,但并未缺席,为何没有检测到呢?

     

    一开始我们以为是代码BUG,但是始终测试不出来,测试环境我试过过了一个周末之后,再把dbas.ok文件放上去,依然能正常检测到并继续后续的批量步骤。

    于是我又各种猜测,可能是NFS有什么猫腻,可能是抛了SecurityException线程死掉了,可能是其他线程占用了资源,使得该线程sleep结束之后一直阻塞

     

    最后我看日志发现,是事务超时了。由于我们把每一个批量的一环,都放在一个事务中执行,服务器上事务的超时时间配的非0值(0值则永不超时),所以时间太长,就超时了。并且我就这个问题做了未验证的猜测,即事务超时时并不会立即抛错,而是commit的时候抛出错误

    继续深入

    参考了http://www.importnew.com/2466.html

    我们是这样执行的事务:

    TransactionTemplate transactionTemplate = BatchSupportor.getTransactionTemplate();
                transactionTemplate.execute(new TransactionCallback() {
    
                    @Override
                    public Object doInTransaction(TransactionStatus arg0) {
                        try {
                            略
                        } catch (Throwable t) {
                            if (!(t instanceof CoreTransactionException)) {
                                throw t;
                            }
                            logError(t, null);
                        }
                        return null;
                    }
                });
    其中transactionTemplate配置在xml文件中
    <transactionTemplate id="transactionTemplate">
            <ref name="transactionManager">transactionManager</ref>
            <param name="propagationBehaviorName">PROPAGATION_REQUIRED</param>
            <param name="isolationLevelName">ISOLATION_READ_COMMITTED</param>
            <param name="readOnly">false</param>
            <param name="timeout">150</param><!-- in seconds -->
    </transactionTemplate>
    <transactionTemplate>是公司的自定义标签,并且这里配置的超时时间是150秒
    但当我在一个事务里sleep了三个小时以后,依然没有报错。可见该配置并没有起到作用。接下来的日志我将要仔细复习一下事务与mybatis
  • 相关阅读:
    项目管理基本目录结构
    Linux 杀死所有进程
    PHP生成唯一固定长度邀请码
    ubuntu LNMP环境下安装Redis,以及php的redis扩展
    Ubuntu linux 返回上一次访问的目录
    ubuntu删除ppa源
    ubuntu1.8安装lnmp失败
    phpstorm更改sql文件匹配类型
    小程序组件概述
    小程序中WXSS样式控制
  • 原文地址:https://www.cnblogs.com/heben/p/7921873.html
Copyright © 2011-2022 走看看