Боты сильно кушают память.... в итоге краш

  • Автор темы Автор темы Wollart
  • Дата начала Дата начала

Wollart

Знаменитый
Участник
Старожил I степени
Сообщения
52
Розыгрыши
0
Решения
1
Репутация
0
Реакции
0
Баллы
1 298
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
Open-Team
Всем привет, подскажите кто то пробывал оптимизировать ботов на своих сборках. Вроде они не так сильно по началу нагружают серв, торговцы сидят в xml-ках и бегают в шаут кричат, но в итоге после 15+ часов - серв падает с печальным логом " APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!"

Подскажите что более рационально из этих функуций оптимизации Явы


Код:
#!/bin/sh

# ======== JVM settings =======
# Set heap min/max to same size for consistent results
# одинаковый размер памяти для Xms и Xmx, JVM пытается удержать размер heap'а минимальным, и если его нужно меньше, чем в Xmx - гоняет GC понапрасну
# -Xmn ставим в 5-6 рас меньше чем -Xmx.
javaopts=" -Xms16G"
javaopts="$javaopts -Xmx16G"

# Альтернативные настройки самой JVM."
java_settings="-XX:+DoEscapeAnalysis"
# Циклы заполнения/копирования массивов заменяются на прямые машинные инструкции для ускорения работы.
java_settings="$java_settings -XX:+OptimizeFill"
# Опция, устраняет лишние блокировки путем их объединения.
java_settings="$java_settings -XX:+EliminateLocks"
# Позволяет расширить диапазон кешируемых значений для целых типов при старте виртуальной машины.
java_settings="$java_settings -XX:AutoBoxCacheMax=65536"
# TODO: пзучить данный конфиг, как он будет вести себя у нас в сборке. 4000 - по умолчанию, 500 - при включенной AggressiveOpts
# java_settings="$java_settings -XX:BiasedLockingStartupDelay=4000"
# TODO: пзучить профит у нас в сборке, от данной опции.
java_settings="$java_settings -XX:+OptimizeStringConcat"
# java_settings="$java_settings -XX:+UseCompressedStrings"
# TODO: Не совсем понятный параметр.
# java_settings="$java_settings XX:+EliminateAutoBox"
# TODO: Провести тесты, на сколько сильно, это нам секономит потребление ОЗУ.
#java_settings="$java_settings -XX:+UseCompressedOops"
# TODO: Есть ли нам профит от данной опции?
#java_settings="$java_settings -XX:+UseStringCache"
# Включает опции которые выше + использует альтернативную библиотеку...
# java_settings="$java_settings -XX:+AggressiveOpts"
Уверен я не единственный у кого так.
 
Оверпостинг
Код:
# Настройки сборщиков мусора.
# ###################################################################################
#java_settings="$java_settings -Xincgc"
#java_settings="$java_settings -Xnoclassgc"
# -----------------------------------------------------------
java_settings="$java_settings -XX:+UseParNewGC"
# java_settings="$java_settings -XX:+UseParallelOldGC"
# Параметр равен, количеству потоков ЦП.
java_settings="$java_settings -XX:ParallelGCThreads=8"

# -----------------------------------------------------------
# Хуеватый вариант, по предварительной оценке:)
# java_settings="$java_settings -XX:+UseG1GC"
# java_settings="$java_settings -XX:MaxGCPauseMillis=50"
# java_settings="$java_settings -XX:GCPauseIntervalMillis=60000"
# -----------------------------------------------------------
# -----------------------------------------------------------
# Дает очень частые задержки, но в замен держит ОЗУ в чистоте и порядке.
java_settings="$java_settings -XX:+UseConcMarkSweepGC"
#
# Параметр равен, количеству потоков ЦП.
java_settings="$java_settings -XX:ParallelCMSThreads=8"
#java_settings="$java_settings -XX:+ExplicitGCInvokesConcurrent"
#java_settings="$java_settings -XX:+CMSParallelRemarkEnabled"
#java_settings="$java_settings -XX:+CMSScavengeBeforeRemark"

java_settings="$java_settings -XX:+CMSClassUnloadingEnabled"
java_settings="$java_settings -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses"
# java_settings="$java_settings -XX:+UseCMSInitiatingOccupancyOnly"
# java_settings="$java_settings -XX:CMSInitiatingOccupancyFraction=60"
 
В какой-то момент, логика работы ваших ботов что-то вроде "зацикливается". Для понимания, что это такое, привел бы пример перекрестка, на котором не работает светофор, а все как стадо выперлись на перекресток и перекрыли друг другу дорогу. в итоге пробка, проехать дальше никто не может, т.к. взаимоблокируют друг друга. Что-то подобное происходит с ботами. Либо искать нужный кондишн (посмотрите как выбрасывает исключение, как автор кода распознает дедлок) и если так произошло - как вариант, деспавн и повторная инициализация ботов. Но это костыль, а не решение =)
 
Согласен, ну как бы реализован сборщик мусора. Самое интересное что часов 15-18 всё работает стабильно после запуска сервера, а потом всё в одну минуту крашится очень стремительно, такое ощущение что кончилось свободное пространство какое то.
 
Н
Согласен, ну как бы реализован сборщик мусора. Самое интересное что часов 15-18 всё работает стабильно после запуска сервера, а потом всё в одну минуту крашится очень стремительно, такое ощущение что кончилось свободное пространство какое то.
Ну как минимум профайлер в помощь. Там и будет понятно в чем проблема.
 
Назад
Сверху Снизу