Память JVM задаётся раздельно, автоперезапуск можно отменить

Панель принудительно ставила -Xms равным -Xmx: куча не растёт на ходу, но
JVM обязана занять весь объём при старте. На машине с 5 ГБ ОЗУ сервер с
4g так вообще не поднимался — «Failed to allocate initial Java heap».

Теперь -Xmx задаётся как раньше, а -Xms стал отдельным полем профиля и по
умолчанию пуст: JVM берёт память по мере надобности. Пара значений
проверяется при сохранении профиля, а не при запуске сервера, — про
опечатку лучше узнать из формы, чем из лога упавшего сервера.

Там же в супервизоре: ожидание автоподъёма стало отдельным состоянием.
Раньше упавший сервер уходил в цикл «падение — пауза 10 секунд — падение»,
причём во время паузы он считался остановленным, и прервать это было
нечем. Теперь паузу видно в статусе с обратным отсчётом и её можно
отменить, а после трёх падений сразу после запуска подряд панель
перестаёт поднимать сервер сама: так проявляется нехватка памяти или
битый конфиг, и перезапуск тут не помогает.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 02:25:16 +03:00
co-authored by Claude Opus 5
parent f6eba8c75c
commit e78a72d516
6 changed files with 380 additions and 37 deletions
+7 -3
View File
@@ -236,12 +236,16 @@ func StartBackupScheduler(ctx context.Context, s *Server) {
// При обычном старте то же самое делает супервизор.
func (s *Server) applyJavaMemory(log func(string)) error {
profile := s.cfg.ActiveProfile()
if profile.JavaMemory == "" {
if profile.JavaMemory == "" && profile.JavaMemoryMin == "" {
return nil
}
if err := pzconfig.SetJavaMemory(s.cfg.ServerDir, profile.JavaMemory); err != nil {
if err := pzconfig.SetJavaMemory(s.cfg.ServerDir, profile.JavaMemory, profile.JavaMemoryMin); err != nil {
return err
}
log("Лимит памяти JVM выставлен: " + profile.JavaMemory)
if profile.JavaMemoryMin != "" {
log(fmt.Sprintf("Память JVM: от %s до %s", profile.JavaMemoryMin, profile.JavaMemory))
} else {
log("Лимит памяти JVM выставлен: " + profile.JavaMemory)
}
return nil
}