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

摘要:
于是,就有了一个猜想:多线程引发的问题。猜测导致这个异常的具体行为是A和B都要导出这个pdf,但是B比A晚一点,结果A正常导出了,B在下载至客户端这个步骤的时候,发现这个pdf文件已经被A导出的线程删除了,于是就会报文件不存在的异常。为了证实这个猜想,使用jmeter测试工具模拟六个用户同时100次请求的情况,根据日志打印,果然是这个情况。

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

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

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

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

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

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

免责声明:文章转载自《一次排查多线程问题的记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windbg符号设置PLSQL创建Oracle定时任务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

delphi PDFium 常用功能

PDFium 常用功能 属性和方法 TPdf.Active property Active: Boolean; 打开或关闭选定的PDF文档。 TPdf.FileName property FileName: string; PDF文件的名称(包含路径)。 TPdf.Password property Password: string; PDF文件的密...

WkHtmlToPdf 生成 PDF

1. 首先去http://wkhtmltopdf.org/downloads.html 下载最新版本的安装包 2. 执行安装完成 3. CMD 命令行运行wkhtmltopdf.exe程序生成PDF C:Program Fileswkhtmltopdfin>wkhtmltopdf.exe --orientation Landscape --javas...

在线浏览PDF文件并直接定位到某页面

在文档“在线浏览PDF文件的实用jquery插件推荐” 中我们知道如何将PDF直接在网页中打开,那么如何定位到PDF里的某个页面呢? 看红色字体显示部分: <head runat="server">    <title></title>     <script src="http://t.zoukankan.com...

PDF合并

要求:将多个table导出到一个PDF里,然后打印。  问题分析:要求将四个table放一个PDF打印,四个table的列各不相同,第一个是表头,其他三个是列表,列比表头多很多,如果直接生成一个excel,然后再直接导出会发现有些列在PDF中换行了。  原因:因为excle可打印的区域是有限制的,可打印的地方如下方法可见:文件-打印-设置-打印选择区域(如...

用pdf.js实现在移动端在线预览pdf文件

用pdf.js实现在移动端在线预览pdf文件1、下载pdf.js官网地址:https://mozilla.github.io/pdf.js/ 2、配置下载下来的文件包,就是一个demo,仿照这个demo做就可以(1)页面元素如下: <button id="noteDetail">test</button><button id...

APEX-数据导出/打印 学习

前言:  由于公司使用了Oracle APEX构建应用,且在APEX新版本v20.2版本中增强了相关报表导出数据相关功能;正好现在做的事情也需要类似的功能,就先来学习一下Oracle的APEX相关功能及实现方式;为自己优化实现相关功能做些积累吧。  先简单介绍下APEX是什么? APEX是什么:  APEX:Oracle Application Expre...