ItemsAdder: 4.1.0-beta-nativepackets-2
Сервер: Purpur 1.21.11-2568, Java 25, Windows Server
Контент: ~2258 предметов, 6385 файлов в contents/
Проблема:
После команды /iazip --apply-to self главный поток сервера зависает
на ~60 секунд. Watchdog срабатывает 12 раз подряд
("The server has not responded for 10/15/20/.../60 seconds"),
игроки отключаются с "Connection lost / Timed out".
Стек в момент зависания:
java.io.WinNTFileSystem.getBooleanAttributes0(Native Method)
java.io.File.isDirectory / isFile
org.apache.commons.io.FileUtils.listFiles(FileUtils.java:2369/2377/2396)
itemsadder.m.di.ep(SourceFile:282)
itemsadder.m.d.b(SourceFile:1255)
itemsadder.m.d.c(SourceFile:932)
itemsadder.m.d.a(SourceFile:732)
...
itemsadder.m.ze.onCommand(SourceFile:45)
Далее зависание продолжается на:
PNGImageReader.decodeImage -> dev.lone.itemsadder.resourcepack.bt.A(SourceFile:5781)
Причина, как я понимаю:
ItemsAdder рекурсивно обходит
plugins/ItemsAdder/storage/cache/vanilla_assets/
— это ~160 000 мелких файлов (25 версий Minecraft, распакованных
из vanilla_assets.zip). Плюс contents/ и ModelEngine/resource pack.
Всё это выполняется синхронно в главном потоке.
Замеры на этом же сервере (тот же код FileUtils.listFiles):
160 123 файла -> 44 секунды (86 с при холодном кэше)
10 371 файл -> 7.4 секунды
6 385 файлов -> 5.0 секунды
Историческая деградация (замерено по логам этого же сервера):
07-14 IA 4.0.18-beta-25 -> 8-11 с
08-15 IA 4.0.18-beta-25 -> 9-17 с
08-22 IA 4.0.18-beta-25 -> 10-17 с
09-04 ~4.0.18-beta-25 -> 8-9 с
09-12 IA 4.0.18 (релиз) -> 29-31 с
09-17 IA 4.1.0-beta-nativepackets-2 -> 60 с
Антивирус исключён: замеренный CPU антивируса во время обхода
не изменился (205.2s -> 205.2s). Defender и Windows Search отключены.
Диск NVMe, 99.5% idle, очередь 0. ОЗУ 127 ГБ, свободно 17.6 ГБ.
Вопрос:
Это известная проблема? Планируется ли вынести генерацию
ресурспака в асинхронный поток или кэшировать список файлов?
Достаточно ли обновить конфиг, или нужно ждать исправления?