Memory leaks 使用OpenOffice4时CPU利用率100%

Memory leaks 使用OpenOffice4时CPU利用率100%,memory-leaks,openoffice.org,jodconverter,Memory Leaks,Openoffice.org,Jodconverter,我正在尝试使用将文档(.docx/.xlsx/.pptx)转换为PDF。我在Centos 7上使用OpenOffice 4.1.2。我的问题是,在转换文件时,CPU的使用率一直保持在100%,这会影响整个机器的性能。我已经在命令行选项中尝试了所有可能的选项,但不幸的是,没有能够缓解这个问题。我在很多论坛上搜索过,发现很多其他人也面临着同样的问题,但是,没有解决办法。通过阅读,我意识到这可能是因为OpenOffice中存在内存泄漏问题。有人能帮我解决或至少缓解这个问题吗 下面是我用来生成OpenO

我正在尝试使用将文档(.docx/.xlsx/.pptx)转换为PDF。我在Centos 7上使用OpenOffice 4.1.2。我的问题是,在转换文件时,CPU的使用率一直保持在100%,这会影响整个机器的性能。我已经在命令行选项中尝试了所有可能的选项,但不幸的是,没有能够缓解这个问题。我在很多论坛上搜索过,发现很多其他人也面临着同样的问题,但是,没有解决办法。通过阅读,我意识到这可能是因为OpenOffice中存在内存泄漏问题。有人能帮我解决或至少缓解这个问题吗

下面是我用来生成OpenOffice实例的命令

/opt/openoffice4/program/soffice.bin -accept=socket,host=127.0.0.1,port=8016;urp; -env:UserInstallation=file:///tmp/.jodconverter_socket_host-127.0.0.1_port-8016 -headless -nocrashreport -nodefault -nofirststartwizard -nolockcheck -nologo -norestore
我用于转换文件的代码如下所示: 包org.samples.docxconverters.jodconverter.pdf

import java.io.File;

import org.apache.commons.io.FilenameUtils;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

public class Word2PdfJod {

    public static void main(String[] args) {

        // 1) Start LibreOffice in headless mode.
        OfficeManager officeManager = null;
        try {
            officeManager = new DefaultOfficeManagerConfiguration()
                .setOfficeHome(new File("/Applications/OpenOffice.app/Contents/")).buildOfficeManager();
            officeManager.start();

            // 2) Create JODConverter converter
            OfficeDocumentConverter converter = new OfficeDocumentConverter(
                    officeManager);

            // 3) Create PDF
            createPDF(converter);

        } finally {
            // 4) Stop OpenOffice in headless mode.
            if (officeManager != null) {
                officeManager.stop();
            }
        }
    }

    private static void createPDF(OfficeDocumentConverter converter) {
        try {
            long start = System.currentTimeMillis();
            String src_file = "/Users/Aman/Documents/WindowsData/DocumentConversionPoc/Powerpoint2Pdf/JODConverterV3/Sample_pptx_files/AdeemSample2.pptx";

            System.out.println(src_file.substring(0, src_file.lastIndexOf(".")) + "_" + FilenameUtils.getExtension(src_file) );
            //Actual Conversion

            converter.convert( new File(src_file), new File( src_file.substring(0, src_file.lastIndexOf(".")) + "_" 
                        + FilenameUtils.getExtension(src_file) +"_Jod.pdf") );
            System.out.println("Time Taken in conversion -  "+ (System.currentTimeMillis() - start) + "ms");


        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}
相关JAR可从以下网站下载:

如果CPU空闲,默认情况下,进程将占用100%的CPU时间。这很正常。如果这会妨碍其他进程的执行(可能性很小),可以使用
nice
设置优先级

nice <your command>
不错

或者,您可以安装
cpulimit
,如果程序达到预定义的CPU使用率,它将使程序休眠。阅读相关内容。

如果CPU空闲,默认情况下,进程将占用100%的CPU时间。这很正常。如果这会妨碍其他进程的执行(可能性很小),可以使用
nice
设置优先级

nice <your command>
不错

或者,您可以安装
cpulimit
,如果程序达到预定义的CPU使用率,它将使程序休眠。阅读相关内容。

通过减少应用程序可以使用的内核数量,可以防止系统被锁定:

Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)2;

通过减少应用程序可以使用的内核数量,可以防止系统被锁定:

Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)2;

我不明白你所说的“如果CPU空闲,一个进程默认需要100%的CPU时间”是什么意思。为什么默认情况下该进程需要100%的CPU。此外,我试图找到导致此问题的根本原因,并以某种方式缓解它,而不是限制进程的CPU使用。我们使用的是基于此的微服务,在AWS上,它倾向于在负载平衡下生成大量VM。另外,休眠程序对我们来说不是一个解决方案,因为我们希望服务一直处于启动和运行状态。我不明白你所说的“如果CPU空闲,一个进程默认需要100%的CPU时间”是什么意思。为什么默认情况下该进程需要100%的CPU。此外,我试图找到导致此问题的根本原因,并以某种方式缓解它,而不是限制进程的CPU使用。我们使用的是基于此的微服务,在AWS上,它倾向于在负载平衡下生成大量VM。另外,休眠程序对我们来说不是一个解决方案,因为我们希望服务能够一直启动和运行。避免使用JOD转换器并使用Ghostscript@deblocker问题在于OpenOffice/LibreOffice,而不是JOD。仅供参考,我已经尝试过Ghostscript了,它没有帮助。它进一步将转换分解为两部分:Doc->PostScript->PDF。它大大增加了转换时间,这是我们真正想保持低水平的东西我在过去做了很多pdf批量打印,尽管不是用你的OO版本,GS一直是我的最佳选择。恐怕,如果这对你没有帮助的话。祝你好运避免使用JOD转换器,并使用Ghostscript@deblocker问题在于OpenOffice/LibreOffice,而不是JOD。仅供参考,我已经尝试过Ghostscript了,它没有帮助。它进一步将转换分解为两部分:Doc->PostScript->PDF。它大大增加了转换时间,这是我们真正想保持低水平的东西我在过去做了很多pdf批量打印,尽管不是用你的OO版本,GS一直是我的最佳选择。恐怕,如果这对你没有帮助的话。祝你好运