Как перезапустить SHA256MigrationJob без перезапуска Артефактории? - PullRequest
0 голосов
/ 14 ноября 2018

Я продолжаю сталкиваться с сообщением об ошибке ниже в sha256_migration.log.Он не перезапускается после сбоя, однако, если я перезапущу службу артефакта, он начнет миграцию SHA256 с того места, где он остановился, до тех пор, пока снова не произойдет сбой.

2018-11-13 10:24:35,060 [art-exec-3] [ERROR] (o.a.s.j.m.s.Sha256MigrationJob:78) - Caught unexpected exception during SHA256 Migration job, operation will break.
org.springframework.core.task.TaskRejectedException: Executor [org.artifactory.schedule.ArtifactoryConcurrentExecutor@70a2137a] did not accept task: org.artifactory.schedule.aop.AsyncAdvice$$Lambda$654/1640835804@7dbf55d3
        at org.springframework.core.task.support.TaskExecutorAdapter.submit(TaskExecutorAdapter.java:93)
        at org.springframework.scheduling.concurrent.ConcurrentTaskExecutor.submit(ConcurrentTaskExecutor.java:143)
        at org.artifactory.schedule.aop.AsyncAdvice.submitWorkQueueTask(AsyncAdvice.java:235)
        at org.artifactory.schedule.aop.AsyncAdvice.submit(AsyncAdvice.java:217)
        at org.artifactory.schedule.aop.AsyncAdvice.executeInvocation(AsyncAdvice.java:146)
        at org.artifactory.schedule.aop.AsyncAdvice.invoke(AsyncAdvice.java:124)
        at org.artifactory.schedule.aop.AsyncAdvice.invoke(AsyncAdvice.java:62)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
        at com.sun.proxy.$Proxy144.updateSha2(Unknown Source)
        at org.artifactory.storage.jobs.migration.sha256.Sha256MigrationJob.migrationLogic(Sha256MigrationJob.java:134)
        at org.artifactory.storage.jobs.migration.MigrationJobBase.migrationLoop(MigrationJobBase.java:106)
        at org.artifactory.storage.jobs.migration.MigrationJobBase.runMigration(MigrationJobBase.java:83)
        at org.artifactory.storage.jobs.migration.MigrationJobBase.onExecute(MigrationJobBase.java:73)
        at org.artifactory.schedule.quartz.QuartzCommand.execute(QuartzCommand.java:48)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.artifactory.concurrent.ArtifactoryRunnable.run(ArtifactoryRunnable.java:30)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.RejectedExecutionException: Task org.artifactory.concurrent.ArtifactoryRunnable@4afb003 rejected from java.util.concurrent.ThreadPoolExecutor@33daf5aa[Running, pool size = 64, active threads = 64, queued tasks = 10000, completed tasks = 120723]
        at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
        at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
        at org.artifactory.schedule.ArtifactoryConcurrentExecutor.execute(ArtifactoryConcurrentExecutor.java:69)
        at org.springframework.core.task.support.TaskExecutorAdapter.submit(TaskExecutorAdapter.java:88)
        ... 19 common frames omitted

Мои artifactory.system.properties относительно sha256migration

##SHA2 Migration block
artifactory.sha2.migration.job.enabled=true
artifactory.sha2.migration.job.queue.workers=100

Моя настройка:

  • Клонированные производственные экземпляры инфраструктуры Artifactory в тестовый экземпляр (за исключениемIP-адрес и записи DNS).
  • Убедитесь, что конфигурации к базе данных и хранилищу файлов (db.properties и binarystore.xml) были соответствующим образом обновлены на клонированных экземплярах.

То, что я пробовалбез везения:

  • Я запускал Artifactory GC пару раз.
  • Увеличил количество процессоров до 16
  • Увеличил ОЗУ до 16G
  • Убедитесь, что у меня установлена ​​последняя версия Oracle Java 8u192

Что я знаю:

  • Он будет работать нормально некоторое время, пока не выйдет из строя.
  • КогдаЯ перезапускаю службу артефактов, миграция возобновляется, и общее количество артефактов для миграции уменьшается.
  • Я не могу продолжать перезапуск Артефактуры в рабочем состоянии, чтобы завершить работу sha256migrationjob, у меня более 500 тыс. Артефактов.

Мой вопрос:

  • Есть ли способ перезапустить SHA256MigrationJob без перезапуска Артефактуры?
  • Есть ли способ найти артефакт, из-за которого возникают проблемы при переходе на SHA256?
  • В приведенной выше трассировке стека я чувствую, что проблема в com.sun.proxy. $ Proxy144.updateSha2 (Неизвестный источник) .

- Обходной путь-

В итоге я создал новую виртуальную машину и установил чистую копию Artifactory 6.5.3 (с последней версией Oracle Java 8 Server-JRE).В вышеупомянутой проблеме я выполнял обновление на месте, просто в новой папке.

Я переместил необходимые файлы в etc на новую ВМ;такие как master.key, binarystore.xml, db.properties и т. д. Затем я выполнил bin / installService.sh [пользователь] [группа], это создаст перемещение символьной ссылки / папки конфигурации / etc / opt / jfrog / artifactory.Моя база данных файлового хранилища и базы данных Artifactory работает на разных виртуальных машинах, поэтому необходимо перенести только Artifactory и его конфигурации файлов.

Новая версия Artifactory 6.5.3 запущена без проблем.

Задача sha256migrationна самом деле работает без проблем.Последний прогон обновления, который я сделал, работал без потери работы.

Примечания: я также корректно настроил значения конфигурации для рабочих очереди.https://www.jfrog.com/confluence/display/RTF/Checksum-Based+Storage#Checksum-BasedStorage-ConfiguringtheMigrationProcess

1 Ответ

0 голосов
/ 20 ноября 2018

tl; dr уменьшение artifactory.sha2.migration.job.queue.workers примерно до 2 - 2 * количество ядер.

То, что вы испытываете, является исчерпанием ThreadPoolExecutor. Размер пула потоков по умолчанию составляет 4 * [количество ядер]. В вашем случае 64 (16 ядер * 4)

Однако ограничение на количество потоков, настроенных для задания миграции sha256, составляет 100.

На экземпляре артефакта без какой-либо загрузки это не вызовет сбоев, поскольку существует очередь, поддерживающая извлечение потока (в вашем случае размер равен 10000).

В вашем случае поток и очередь заполнены.

Если я правильно понимаю, вы преодолели проблему. Но для других людей, сталкивающихся с этой веткой, я бы рекомендовал уменьшить значение artifactory.sha2.migration.job.queue.workers до не более половины числа потоков, извлекающих нити.

Так в вашем случае 32: (16 * 4) / 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...