摘要:已经上线的项目,出现服务挂掉的情况。

介绍:该服务是专门做打印的,业务需求是生成PDF文件进行页面预览,主要是使用ItextPDF+freemaker技术生成一系列PDF文件,其中生成流程有:解析模板生成临时PDF文件--->在临时PDF文件上注入文本和签名域--->旋转页面--->合并生成的多个PDF文件--->删除全部临时文件。

由于该业务生成的文件只是用来预览,不做保存,所以需要生成后就要删除。而每次生成的文件都是放在一个临时文件夹下,临时文件夹一开始我是根据建议书ID创建的(此处是导致宕机的关键所在),由于业务是每个用户只会操作自己账户下的建议书,既不会出现多人操作同一个建议书,既建议书(ID)具有唯一性,所以临时文件夹就以建议书ID命名。但是页面在预览的时候还有个另存为的业务,预览和另存为都是调的同一个生成文件的接口,如果用户在预览还在加载的时候就去点击另存为,此时会有新的线程去做同样的操作。由于该接口操作很多文件,所以响应会有点慢,导致预览的线程正在处理生成的文件,而另存为的线程又去生成同样的文件,并且是在同一个文件夹内,此时可能会出现预览线程正在处理的文件突然被另存为线程生成的文件覆盖,或者由于预览线程已经生成同样的文件而另存为线程生成不了,在这一过程中导致了服务的宕机。

bug修复过程:

开始以为是文件流未关闭导致的内存溢出,从而导致服务宕机,但是通过监控发现内存充足,后来查看生产环境上宕机的日志,猜测是上面提到的原因。通过线程睡眠模拟复现宕机bug,经过几番尝试,终于复现了!

而这个bug的罪归祸首就是那个临时文件夹,仅仅修改临时文件夹随机生成即可。

针对服务宕机的更深的分析需要一些时间去处理,暂时由于时间问题不做分析!

转载于:https://www.cnblogs.com/JohnsonLiu/p/11544583.html

记-ItextPDF+freemaker 生成PDF文件---导致服务宕机相关推荐

  1. 震惊!这样终止线程,竟然会导致服务宕机?

    来自:Java中文社群 在开始之前,我们先来看以下代码会有什么问题? public class ThreadStopExample {public static void main(String[] ...

  2. itextpdf通过pdf模板生成pdf文件

    itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...

  3. Java使用itextpdf生成PDF文件,用浏览器下载

    浏览器下载生成PDF文件 1.引入jar包 <dependency><groupId>com.itextpdf</groupId><artifactId> ...

  4. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器

    标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...

  5. java 生成字体文件,java使用itext生成pdf文件-设置字体,itextpdf,import com.l

    java使用itext生成pdf文件-设置字体,itextpdf,import com.limport com.lowagie.text.Document;import com.lowagie.tex ...

  6. itextpdf添加表格元素_itext生成pdf文件-表格

    生成pdf常用的插件有iReport.和itext,这里将使用itext生成pdf文件. 多于的话不说直接上demo和需要的jar,如果pdf中有图片要画的话可以用jfreeChart画. packa ...

  7. Itext生成pdf文件,itext+Freemarker生成pdf,(中文空白解决)

    来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...

  8. 生成PDF文件方案--学习中

    PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段"暴力"破解 ...

  9. 前端生成PDF 文件教程+在线demo案例

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 PDF 简介 PDF 全称Portable Document Format (PDF)(便携文档格式),该格式的显示与操作系统.分辨 ...

最新文章

  1. Windows 11 再惹“众怒”!网友:微软就是逼我去买新电脑!
  2. linux查看cpu个数命令,Linux怎么查看物理CPU个数
  3. 在DockerHub发布Dubbo Admin镜像
  4. 什么是matlab中的fints函数,Matlab基本函数
  5. 数据库“意外失联”?华为云DRS异地多活灾备为您支招
  6. stream流_Stream流的这些操作,你得知道,对你工作有很大帮助
  7. Linux---线程池的实现
  8. 解决win7能上网却右下角网络图标显示红色叉号的问题
  9. 最快的滚屏截图软件--SpaceCapture
  10. SqList顺序表实现笔记
  11. matlab imagesc 白色,[转载]matlab 中imagesc的用法
  12. 为什么视锥剔除重要,却又不重要 | Why Frustum Culling Matters, and Why It‘s Not Important
  13. div中border属性
  14. Knowledge Distillation
  15. Web开发常见问题汇总
  16. postgresql安装报错
  17. HTML和CSS实现京东首页(附GitHub地址)
  18. 常见软件设计原则总结
  19. c加加中print是什么意思_数学中质数和合数是什么意思
  20. 基于Zynq的光流法软硬件协同设计与实现

热门文章

  1. mysql 5.7.29下载安装_deepin20 离线安装 MySQL5.7.29
  2. sqlerver 字符串转整型_sqlerver2005(2)
  3. mysql有状态无状态_有状态和无状态的对象区别
  4. 抑制过拟合的方法之Dropout(随机删除神经元)
  5. java 怎么启动线程_线程如何正确的启动
  6. mysql添加标签_PHP / MySQL - 如何添加多个标签
  7. 微软官方SqlHelper
  8. AspectJ 在 Spring 中的使用
  9. eclipse中选中字段,其他相同字段被覆盖的颜色修改
  10. ubuntu下opencv和qt的安装配置