码迷,mamicode.com
首页 > 编程语言 > 详细

一次排查多线程问题的记录

时间:2020-01-02 20:39:22      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:一点   ima   定位   查看   开始   日志   填充   图片   解决   

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

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

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

技术图片

 

 

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

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

一次排查多线程问题的记录

标签:一点   ima   定位   查看   开始   日志   填充   图片   解决   

原文地址:https://www.cnblogs.com/yelele/p/12141773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!