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
  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/heben/p/7921873.html
Copyright © 2011-2022 走看看