Squeak.ru - шаблоны программирования

Пространство кучи - администрирование памяти

У нас есть приложение, которое раз в день использует всю выделенную память кучи. Я сделал дамп памяти кучи, чтобы помочь мне найти причину этой проблемы, которая доступна по этой ссылке https://drive.google.com/file/d/0BwMd9KDnQRfQT3dzRTZfUWdjMU0/view?usp=sharing. Я считаю, что приложение плохо реализовано, или это может быть связано с технологией DB4O и ее объектами, отправляемыми между клиентом и сервером, или соединениями, открытыми для сервера после того, как пользователи синхронизируют данные между своими системами и сервером. Служба не предоставила ошибку: Недостаточно памяти: пространство кучи, но я следую вашему выделению ресурсов, чтобы сказать это.

Я запускаю приложение с помощью этого сценария оболочки ...

set +x

export BRANCHOFFICE_HOME=/bat/orquestra/branchoffice/live18
cd ${BRANCHOFFICE_HOME}
echo BRANCHOFFICE_HOME = ${BRANCHOFFICE_HOME}

# classpath
OQT_CLASSPATH=${BRANCHOFFICE_HOME}/classes/:${BRANCHOFFICE_HOME}/classes/branchoffice.jar

for libFile in ${BRANCHOFFICE_HOME}/lib/*.jar
do
  OQT_CLASSPATH=${OQT_CLASSPATH}:${libFile}
done

export OQT_CLASSPATH
echo OQT_CLASSPATH = ${OQT_CLASSPATH}

# JVM arguments
JAVA_ARGS=-server
JAVA_ARGS=${JAVA_ARGS}" -Xms2048m"
JAVA_ARGS=${JAVA_ARGS}" -Xmx2048m"
JAVA_ARGS=${JAVA_ARGS}" -XX:+UseLargePages"
JAVA_ARGS=${JAVA_ARGS}" -Duser.timezone=America/Sao_Paulo"
JAVA_ARGS=${JAVA_ARGS}" -Duser.country=BR"
JAVA_ARGS=${JAVA_ARGS}" -Duser.language=pt"
JAVA_ARGS=${JAVA_ARGS}" -cp "${OQT_CLASSPATH}
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote=synchengine.SynchEngine"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.port=1207"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.password.file="${BRANCHOFFICE_HOME}"/config/passwordFile"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.access.file="${BRANCHOFFICE_HOME}"/config/accessFile"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.snmp.acl.file="${BRANCHOFFICE_HOME}"/config/acl"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.ssl=false"
export JAVA_ARGS
echo JAVA_ARGS = ${JAVA_ARGS}

# APP arguments
export APP_ARGS=${BRANCHOFFICE_HOME}/config/SynchEngine.xml
echo APP_ARGS = ${APP_ARGS}

echo Starting Synchronization Engine

Я хотел бы получить какие-либо советы или поддержку, потому что приложение очень большое.

Сервер ...

  • Архитектура: x86_64
  • Операционные режимы ЦП: 32-разрядный, 64-разрядный
  • Порядок байтов: Little Endian
  • ЦП: 4
  • Он-лайн список ЦП: 0-3
  • Потоков на ядро: 1
  • Ядра на сокет: 1
  • Розетка (и): 4
  • NUMA узлов: 1
  • ID поставщика: GenuineIntel
  • Семейство процессоров: 6
  • Модель: 42
  • Шаг: 2
  • Процессор МГц: 2294,472
  • BogoMIPS: 4588,94
  • Производитель гипервизора: VMware
  • Тип виртуализации: полная
  • Кэш L1d: 32 КБ
  • Кэш L1i: 32 КБ
  • Кэш L2: 256 КБ
  • Кэш L3: 15360 КБ
  • NUMA node0 ЦП: 0-3

  • Linux версии 3.0.101-0.21-default (geeko @ buildhost) (gcc версия 4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux)) # 1 SMP, понедельник, 7 апреля, 12:32:42 UTC, 2014 (172cdff)

  • Версия Java: 1.5.0_22 x64
  • Версия DB4O: 6.1

Нужна дополнительная информация. Я доступен, благодарен всем, кто может помочь.


Ответы:


1

Похоже, вам нужно закрыть соединения сокетов ..

Заглянув в ваш дамп, вы обнаружите, что соединения ваших сокетов никогда не закрываются, выделяя ненужную память.

23.06.2019

2

Используйте JVisualVM (в каталоге java) для профилирования приложения во время работы. Затем вы можете увидеть общее использование памяти, а также посмотреть, сколько памяти занимают различные типы объектов.

15.06.2016
  • Приложение использует версию Java 1.5, и, к сожалению, мы не можем изменить версию Java по этой причине, потому что другой поставщик является администратором сервера. 15.06.2016
  • Итак, вы пытались запустить приложение с Java 1.7 или 1.8, и это не удалось? 15.06.2016
  • Нет, локально с использованием этих версий Java работает, но нехватки памяти не возникает. Мы не получили того, что происходит на сервере в нашей среде. 15.06.2016
  • Это сложная ситуация, но я бы настроил тестовую среду, максимально загрузил программу и контролировал бы память с помощью профилировщика JVisualVM. Тогда можно увидеть, какие объекты используют большую часть памяти. Однако изменить код для устранения этой проблемы может быть сложно. 17.06.2016
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...