Ooz ie Рабочий процесс: Контейнер убит по запросу. Код выхода: 143. Контейнер вышел с ненулевым кодом выхода 143. - PullRequest
0 голосов
/ 06 августа 2020

У меня около 1 миллиона записей в объекте ResultSet, и я пытаюсь загрузить их в корзину s3. Я записываю каждую запись в файл, а затем загружаю его с помощью putObject. Я создаю JAR и загружаю его в папку s3. Затем я создаю рабочий процесс ooz ie с действием оболочки. Действие оболочки ищет местоположение JAR и запускает его.

Проблема - рабочий процесс занимал много времени. (около 7-8 часов)

Подход к решению проблемы - Многопоточность. Я делаю каждую задачу записи в файл / загрузки как выполняемую задачу и выполняю их с помощью ExecutorService.

Здесь я наткнулся на стену. Рабочий процесс при таком подходе работает нормально до 8–10 минут и загружает около 5000–6000 записей. Но затем его убивают, и в журналах отображается

Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143

Вот часть кода -

ResultSet resultSet = statement.executeQuery();
int processors = Runtime.getRuntime().availableProcessors();
ExecutorService executorService = Executors.newFixedThreadPool(processors);
while (resultSet.next()) {
           String s1 = resultSet.getString(1);
            String s2 = resultSet.getString(2);
            String s3 = resultSet.getString(3);
            executorService.execute(new Task(s1, s2, s3));
        }

Это класс задачи -

    private static class UploadTask implements Runnable {
            String s1;
            String s2;
            String s3;
            public UploadTask(String s1, String s2, String s3) {
                this.s1 = s1;
                this.s2 = s2;
                this.s3 = s3;
            }
    
            @Override
            public void run() {
                File f1 = new File(FILE_PATH + s1);
                File f2 = new File(FILE_PATH + s1 + s2);
                Writer w1 = null;
                Writer w2 = null;
                try {
                    w1 = new FileWriter(f1);
                    w2 = new FileWriter(f2);
                    w1.write(s2);
                    w2.write(s1);
                    w1.close();
                    w2.close();
                } catch (Exception e) {
                    log.error("Error while writing to file {}", e.getMessage());
    
                }
                s3Client.putObject(new PutObjectRequest(bucket,
                        key,
                        f1));
    
                s3Client.putObject(new PutObjectRequest(bucket,
                        key,
                        f2));
                f1.delete();
                f2.delete();
            }
   }
...