ApacheFOP没有充分利用系统资源

时间:2013-08-27 05:58:52

标签: java performance apache xsl-fo apache-fop

我有一个4 cpu的AmazonEC2实例。我用它来创建PDF报告。一小时内最大用户请求数为10到15个用户。但是,报告的大小很大,大约有3000到5000页的PDF文件。 FOP需要70分钟才能呈现其中一个报告。

问题是Java进程在呈现报告时只使用一个cpu。有没有任何方法,比如配置,我可以强制FOP使用更多cpus然后只有1?

到目前为止我尝试了什么?

我已根据ApacheFOP website上的建议删除日志记录,我也在XSLT中使用页面序列我确保所有样式标记都被重用。

我对FOP做了哪些更改?

很少有页面序列是巨大的,所以我必须给-xms 2000M一个java,所以它不会耗尽内存。顺便说一句,这台机器有16GB RAM。

2 个答案:

答案 0 :(得分:2)

看看FOP's Intermediate Format。有了它,您可以同时格式化多个文档。稍后,您可以连接中间格式文件,以便非常快速地生成单个打印流。最昂贵的部分是格式化。之后生成打印流非常快。

答案 1 :(得分:1)

Apache FOP isn't thread-safe,因此不能跨多个线程同时使用它。您是否考虑过寻找能够更好地处理多线程的不同解决方案,例如JasperReports?使用JasperReports,您可以将这些数千个页面拆分为您运行的子报告以生成PDF。通过使用子报告,JasperReports将自动生成新线程以生成它们。这将需要在iReports中进行一些工作并且需要您进行一些学习,但对于这种规模的报告,我强烈推荐它。