zoukankan      html  css  js  c++  java
  • 一次排查多线程问题的记录

    最近遇到一个导出pdf报文件不存在的异常,查看代码后,发现导出pdf需经四个步骤:生成临时pdf、填充pdf内容、下载至客户端、删除pdf。报文件不存在异常的代码定位到下载至客户端这个步骤。于是,就有了一个猜想:多线程引发的问题。

    猜测导致这个异常的具体行为是A和B都要导出这个pdf,但是B比A晚一点,结果A正常导出了,B在下载至客户端这个步骤的时候,发现这个pdf文件已经被A导出的线程删除了,于是就会报文件不存在的异常。

    为了证实这个猜想,使用jmeter测试工具模拟六个用户同时100次请求的情况,根据日志打印,果然是这个情况。日志截图如下:

    从日志中可以看出487这个线程把文件删除了,485再去下载的时候就会报文件找不到的异常

    解决问题的思路就是把临界资源变成非临界资源,于是我们一开始的做法是在文件名上添加一个时间戳,后来发现也会有重名现象即变成临界资源。后续加了一个UUID(一台机器时空上唯一的序列号),就不会再重名了,即非临界资源。至此问题解决。

  • 相关阅读:
    bzoj3293 分金币
    考前模板整理
    CF785D Anton and School
    容斥法解决错排问题
    CF1248F Catowice City
    CF1248E Queue in the Train
    CF1244F Chips
    CF1244C The Football Season
    Noip2016Day1T2 天天爱跑步
    Noip2015Day2T3 运输计划
  • 原文地址:https://www.cnblogs.com/yelele/p/12141773.html
Copyright © 2011-2022 走看看