Tomcat7 IText在Ubuntu中保持pfm文件打开
我们有一个运行在Tomcat/Ubuntu上的web应用程序,它使用iText7.1.8生成pdf文档(发票)。我们注意到我们的Tomcat崩溃了很多次,然后经过调查发现问题就在它旁边。这是个例外Tomcat7 IText在Ubuntu中保持pfm文件打开,tomcat7,Tomcat7,我们有一个运行在Tomcat/Ubuntu上的web应用程序,它使用iText7.1.8生成pdf文档(发票)。我们注意到我们的Tomcat崩溃了很多次,然后经过调查发现问题就在它旁边。这是个例外 SEVERE: Socket accept failed org.apache.tomcat.jni.Error: 24: Too many open files at org.apache.tomcat.jni.Socket.accept(Native Method)
SEVERE: Socket accept failed
org.apache.tomcat.jni.Error: 24: Too many open files
at org.apache.tomcat.jni.Socket.accept(Native Method)
at org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:992)
at java.lang.Thread.run(Thread.java:745)
当我们运行这个命令时:sudo ls-l/proc/Tomcat PID/fd我们注意到大多数打开的文件都具有扩展名.pfm(例如:/usr/share/fonts/type1/gsfonts/n022004l.pfm),并且从未发布过。此数量将继续增加,直到达到打开文件的最大数量
以下是用于生成pdf的Java代码
public static File convertToPDF(File pdfFile,URL webURL){
InputStream htmlStream=null;
FileOutputStream pdfStream=null;
try {
htmlStream=webURL.openStream();
pdfStream=new FileOutputStream(pdfFile);
ConverterProperties properties = new ConverterProperties();
properties.setFontProvider(new DefaultFontProvider(true, true, true));
HtmlConverter.convertToPdf(htmlStream, pdfStream,properties);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(htmlStream!= null){
htmlStream.close();
}
if(pdfStream!= null){
pdfStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return pdfFile;
}
我们是否应该使用一个单实例来避免这个生成pdf和打开多个文件的过程的多实例
环境:
- Ubuntu 14.04
- Tomcat 7.0.52
- Java 1.7.0_80-b15
- itext 7.1.8
private static ConverterProperties properties;
private static DefaultFontProvider defaultFontProvider;
...
defaultFontProvider= new DefaultFontProvider(true, true, true);
properties.setFontProvider(defaultFontProvider);