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

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

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

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

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

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

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

时间: 2024-10-20 01:34:52

一次排查多线程问题的记录的相关文章

【多线程】零碎记录

把自己之前几篇学习多线程知识的文章合成一篇,目的是方便离线保存. (一)从demo开始 主要参考了下面这个视频内容(https://www.youtube.com/watch?v=fcHngVr4y7M)需FQ. 代码如下: #include <iostream> #include <unistd.h> #include <pthread.h> using namespace std; int sum = 0; void *add(void *); pthread_mu

多线程概要《记录》

问题的提出 新建一个基于对话框的应用程序,在主对话框添加一个按钮,标题为"延时6秒",添加按钮的响应函数,代码如下: void XXXDlg::OnSleepSixSecond() {    Sleep(6000); //延时6秒 } 编译并运行应用程序,单击"延时6秒"按钮,你就会发现在这6秒期间程序就象"死机"一样,不在响应其它消息.为了更好地处理这种耗时的操作,我们有必要学习--多线程编程. 多线程概述 进程和线程都是操作系统的概念.进程是

服务器raid5阵列故障排查及数据恢复过程记录

[服务器故障情况概述] 今天介绍的是服务器raid5阵列因为不明原因导致阵列崩溃后的故障排查方法,以及服务器数据恢复过程.下面简单介绍一下需要恢复数据的服务器硬件配置情况:本次数据恢复案例中的服务器型号为某品牌X3850型号,服务器上组建了一个raid5磁盘阵列,阵列里包含4块成员盘和1块热备盘一共5块.服务器再正常使用过成功突然崩溃,管理员查看raid阵列状态时发现阵列中有2块硬盘掉线,热备盘没有启用.需要从服务器层面进行数据恢复操作.·[服务器数据恢复普通流程]首先关闭服务器并保证在排查故障

【问题记录】记一次ConnectionTimeout问题排查

最近做性能测试时,发现连接第三方系统时会有约1%的交易提示如下错误 nested exception is org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 10000 ms 起先抱着能google就google的思路去找,结果没找到相应的解决方案,只能自己一步一步去排查了,下面记录下排查过程. 抓拍问题现场 涉及到网络的问

Java多线程系列

参考资料: http://www.jianshu.com/p/40d4c7aebd66 0.环境 Java: jdk1.8.0_91 CPU: Intel Core i5-6500 Memory: 8G 1.说明 本系列文章为Java多线程的学习记录 Java多线程系列一--Java实现线程方法 Java多线程系列二--Thread类的方法 Java多线程系列三--实现线程同步的方法 Java多线程系列四--控制线程执行顺序 Java多线程系列五--列表类 Java多线程系列六--Map实现类

史上最全Java多线程面试题及答案

多线程有什么用? 线程和进程的区别是什么? Java实现线程有哪几种方式? 启动线程方法start()和run()有什么区别? 怎么终止一个线程?如何优雅地终止线程? 一个线程的生命周期有哪几种状态?它们之间如何流转的? 线程中的wait()和sleep()方法有什么区别? 多线程同步有哪几种方法? 什么是死锁?如何避免死锁? 多线程之间如何进行通信? 线程怎样拿到返回结果? violatile关键字的作用? 新建T1.T2.T3三个线程,如何保证它们按顺序执行? 怎么控制同一时间只有3个线程运

2020年最全多线程面试题总结,助你“金三银四”过五斩六!

1.多线程有什么用? 1)挥多核CPU 的优势随着工业的进步,现在的笔记本.台式机乃至商用的应用服务器至少也都是双核的,4 核.8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上就浪费了 50%, 在 4 核 CPU 上就浪费了 75%.单核 CPU 上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了.多核 CPU 上的多线程才是真正的多线程,它能让你的多段逻辑同时工

10分钟,AppCan帮你搞定跨平台开发APP问题!

跨平台开发APP时,开发者总会遇到一些问题,如打包失败等等,尤其对于iOS来说,由于它的限制性会导致一些状况发生(如证书上传问题等),小编总结了几个AppCan在线IOS打包失败常见的情况及排查技巧,有所困扰的同学可以作为参考,对问题进行排查. 打包失败分为以下几种情况: 1.插件重复勾选:请检查"公共插件"与"我的插件"(自己上传的插件)是否有重复插件. 2.证书问题:请参照开发指导→iOS证书申请流程的指引文档,在苹果官网正确申请证书.证书上传后检验通过不代表证

XX-net的正确食用姿势

[序] 中国的政府有一个好,全世界哪个网站,比西方政府墙的还快,但墙来墙去的办法都是too...too..sometimes.... 于是我们知道有一堵互联网墙挡在天朝与其他国家之间. 然而这并不是很多OIer所希望看到的.因为歪果有些个GCJ,TC,CF,比BC不知道高到哪里去了,OIer们要跟它们谈笑风生. 这是我们就需要一些螳臂当车的歹徒,来带领我们翻越这堵墙.本次介绍歹徒之一——XX-net. 两三年前,有个叫GoAgent的项目,通过申请GAE AppID来利用谷歌服务器FQ,这就是X