在一篇文章中介绍了自定义字体的实现方法,linux java程序加水印及中文乱码方案(二)
部署到生产后,过了五天,用户反馈图片无法上传,排查日志,发现日志出现java.io.IOException “No space left on device”
翻译成中文: 磁盘空间不足,联系运维赶紧查看服务器空间使用情况 , 结果发现Tomcat下面的temp占用了10G临时文件,类似这种:+~JF4844365602747688375.tmp
经过分析程序,发现原来的代码有问题:
File file = new File(fontFileName);
FileInputStream in = new FileInputStream(file);
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, in);
就出现了吃硬盘的问题。它会在你的容器的临时文件哪里写很多的临时文件,你用一次他就读一次,拷贝一份 *.tmp文件出来
知道原因了,重新调整代码,新代码如下:
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontFileName));
经过验证,不会再出现消息磁盘空间了,优点:低IO,速度快,不会生成tmp文件,没有input流