Загрузка ЦП 100% при использовании OpenOffice4

Я пытаюсь конвертировать документы (.docx/.xlsx/.pptx) в PDF с помощью JOD Converter. Я использую OpenOffice 4.1.2 на Centos 7. Моя проблема в том, что я получаю постоянную загрузку ЦП на 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

Код, который я использую для преобразования файлов, выглядит следующим образом: package 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();
        }
    }
}

А соответствующие банки можно скачать по адресу: https://drive.google.com/file/d/0B4hS5IGxGOh9OE5Ca0RlbTdVclU/view?usp=sharing

2 ответа

Если процессор не используется, процесс по умолчанию займет 100% процессорного времени. Это нормально. Если это вызывает помехи при выполнении других процессов (крайне маловероятно), вы можете установить приоритеты, используя nice,

nice <your command>

Или вы можете установить cpulimit, который переводит вашу программу в спящий режим, если она достигает предустановленной загрузки ЦП. Читайте об этом здесь.

Сокращая количество ядер, которые может использовать ваше приложение, вы можете предотвратить блокировку системы:

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

Чтобы установить сродство процессоров с помощью C#

Другие вопросы по тегам