Java opts как правильно выставить параметры
Перейти к содержимому

Java opts как правильно выставить параметры

  • автор:

java_opts + java_opts environment variable+ Linux java_opts+ how to set java_opts

If you installed JasperReports Server to use an existing Tomcat (not the bundled component) that is running as a Windows service, you can set Java options on the Java Tab of the Tomcat Properties dialog:

1. Launch the Tomcat configuration application from the Windows Start menu:

Start > Programs > Apache Tomcat > Configure Tomcat (Run as administrator)

2. In the Apache Tomcat Properties dialog, click the Java tab.
3. In the Java Options field, add your JAVA_OPTS values according to the tables above.

Enter only the options preceded by -X or -D , not set JAVA_OPTS=%JAVA_OPTS% .

JAVA_OPTS Environment Variable

JAVA_OPTS is an environment variable that you can set to pass custom settings to the Java Virtual Machine (JVM) that runs Liquibase .

Some common use cases for the JAVA_OPTS environment variable are as follows:

Setting Liquibase properties

You can include all Liquibase properties in the Liquibase properties file, or you can set them as Java system properties by using the JAVA_OPTS variable. If you are using an earlier version of Liquibase , you must set them using JAVA_OPTS . For a list of available Liquibase properties, see Create and Configure a liquibase.properties File.

You can set one property at a time, or set multiple properties separated by a whitespace character. For example, to set the changelog-lock-poll-rate property when using the update command, open the command line and pass arguments to JAVA_OPTS using the -Dproperty=value format. On Mac/Linux machine, the syntax is as follows:

The syntax on Windows requires the set command:

Note: In Liquibase version 4.4.0 and above, the syntax for command options has been altered, so changelog-file is now changelog-file . The old format is backwards compatible with 4.4.0, but the new format will not work in older versions of Liquibase .

Memory Allocation

You can use the JAVA_OPTS variable to allocate memory for Liquibase commands in the JVM. By default, the amount of memory available to the JVM is based on your total system memory. The specify a system with 1 GB of RAM. However, using Liquibase commands like update on large databases may require additional memory.

For example, to set the maximum size of the memory heap that the JVM can access while executing the Liquibase generate-changelog command, you can use the -Xmx<value><unit> option as part of the value of the JAVA_OPTS variable. On a Mac/Linux machine, the syntax is as follows:

The syntax on Windows is:

Database Connection

Another use case for the JAVA_OPTS variable is to establish a secure database connection using Liquibase , such as with the Kerberos authentication protocol. An example command that you can use with an Oracle database on a Mac/Linux machine is as follows:

Note: These commands only apply to the current shell. To set permanent environment variables, see Liquibase Environment Variables.

How do I use the JAVA_OPTS environment variable?

How do I use the JAVA_OPTS variable to configure a web server (a linux server)?

How can I set -Djava.awt.headless=true using JAVA_OPTS ?

6 Answers 6

JAVA_OPTS is the standard environment variable that some servers and other java apps append to the call that executes the java command.

For example in tomcat if you define JAVA_OPTS=’-Xmx1024m’ , the startup script will execute java org.apache.tomcat.Servert -Xmx1024m

If you are running in Linux/OSX, you can set the JAVA_OPTS, right before you call the startup script by doing

This will only last as long as the console is open. To make it more permanent you can add it to your

Русские Блоги

Оптимизация памяти Tomcat 2 Описание параметров Tomcat

1. Оптимизация памяти Tomcat

T Оптимизация памяти omcat предназначена главным образом для оптимизации параметров запуска tomcat. Мы можем установить параметр JAVA_OPTS в сценарии запуска tomcat catalina.sh.

1. Описание параметра JAVA_OPTS

  1. -сервер включает серверную версию jdk;
  2. -Минимальная память при инициализации виртуальной машины Xmsjava;
  3. -Максимальный объем памяти, доступный для виртуальной машины Xmxjava;
  4. -XX: постоянная область памяти PermSize
  5. -XX: максимальная постоянная зарезервированная область памяти MaxPermSize

Настройка параметров сервера

Серверная память компании обычно может быть добавлена ​​максимум до 2G, поэтому вы можете использовать следующую конфигурацию:

  1. JAVA_OPTS= ‘-Xms1024m-Xmx2048m-XX:PermSize=256M-XX:MaxNewSize=256m-XX:MaxPermSize=256m’

После завершения настройки вы можете перезапустить Tomcat и использовать следующую команду, чтобы проверить, действует ли конфигурация:

1. Сначала проверьте номер процесса Tomcat:

  1. sudolsof-i:9027

Мы видим, что номер процесса Tomcat — 12222.

1. Проверьте, вступает ли в силу конфигурация:

  1. sudojmap–heap12222

Мы видим, что MaxHeapSize и другие параметры вступили в силу. ,

2. Оптимизация параллелизма Tomcat

1. Параметры подключения Tomcat

В конфигурации <Connector . /> в файле конфигурации Tomcat server.xml

1. Описание параметров

minProcessors: минимальное количество незанятых потоков соединений, используемых для повышения производительности системной обработки, значение по умолчанию 10

maxProcessors: максимальное количество потоков соединений, то есть максимальное количество одновременно обрабатываемых запросов, значение по умолчанию — 75

acceptCount: максимально допустимое количество соединений, должно быть больше или равно maxProcessors, значение по умолчанию равно 100

enableLookups: для обратной проверки доменного имени, значение: true или false. Чтобы улучшить вычислительную мощность, следует установить значение false

connectionTimeout: время ожидания сетевого соединения, единица измерения: миллисекунды. Значение 0 означает, что время ожидания никогда не истекает, этот параметр имеет скрытые опасности. Обычно может быть установлено 30000 миллисекунд.

Параметры, относящиеся к максимальному количеству соединений: maxProcessors и acceptCount. Если вы хотите увеличить количество одновременных подключений, вы должны увеличить оба параметра.

Максимальное количество подключений, разрешенных веб-сервером, также зависит от параметров ядра операционной системы, обычно Windows составляет около 2000, Linux — около 1000.

2. Пример конфигурации в Tomcat

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. minProcessors = "100"
  5. maxProcessors = "1000"
  6. acceptCount = "1000"
  7. redirectPort = "8443"
  8. disableUploadTimeout = "true" />

2. Отрегулируйте параллельную обработку разъема

1. Описание параметров

maxThreads Максимальное количество клиентских запросов

minSpareThreadsNumber потоков сокетов, созданных при инициализации Tomcat

maxSpareThreadsМаксимальное количество потоков незанятых сокетов для коннектора Tomcat

enableLookups Если установлено значение true, разрешение имен доменов поддерживается, и IP-адреса могут быть преобразованы в имена хостов.

redirectPort Когда требуется безопасный сценарий на основе канала, перенаправляйте клиентские запросы на redirectPort на основе SSL

acceptAccount Максимальное количество очередей прослушивающих портов. После заполнения клиентский запрос будет отклонен (не может быть меньше maxSpareThreads)

connectionTimeout тайм-аут соединения

Минимальное количество потоков обработки при создании сервера minProcessors

Максимальный поток одновременной обработки на сервере maxProcessors

URIEncoding Унифицированная кодировка URL

2. Пример конфигурации в Tomcat

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. maxThreads = "1000"
  5. minSpareThreads = "100"
  6. maxSpareThreads = "1000"
  7. minProcessors = "100"
  8. maxProcessors = "1000"
  9. enableLookups = "false"
  10. URIEncoding = "utf-8"
  11. acceptCount = "1000"
  12. redirectPort = "8443"
  13. disableUploadTimeout = "true" />

3. Оптимизация кэша Tomcat

1. Описание параметров

c ompression Включить компрессию

compressionMinSize Размер содержимого вывода с включенным сжатием, по умолчанию 2 КБ

compressableMimeType Тип сжатия

connectionTimeout Определите время для установления тайм-аута клиентского соединения. Если оно равно -1, это означает, что время для установления клиентского соединения не ограничено

2. Пример конфигурации в Tomcat

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. maxThreads = "1000"
  5. minSpareThreads = "100"
  6. maxSpareThreads = "1000"
  7. minProcessors = "100"
  8. maxProcessors = "1000"
  9. enableLookups = "false"
  10. compression = "on"
  11. compressionMinSize = "2048"
  12. compressableMimeType = "text/html,text/xml,text/javascript,text/css,text/plain"
  13. connectionTimeout = "20000"
  14. URIEncoding = "utf-8"
  15. acceptCount = "1000"
  16. redirectPort = "8443"
  17. disableUploadTimeout = "true" />

4. Эталонная конфигурация

1. Старая конфигурация

Сервер был настроен следующим образом со ссылкой на сеть. Извлеките его и поделитесь им:

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. maxThreads = "1000"
  5. minSpareThreads = "25"
  6. maxSpareThreads = "75"
  7. enableLookups = "false"
  8. compression = "on"
  9. compressionMinSize = "2048"
  10. compressableMimeType = "text/html,text/xml,text/javascript,text/css,text/plain"
  11. connectionTimeout = "20000"
  12. URIEncoding = "utf-8"
  13. acceptCount = "200"
  14. redirectPort = "8443"
  15. disableUploadTimeout = "true" />

Позже было обнаружено, что узкие места в работе возникали, когда число посещений достигало более 3 миллионов.

2. Измененная конфигурация

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. maxThreads = "1000"
  5. minSpareThreads = "100"
  6. maxSpareThreads = "1000"
  7. minProcessors = "100"
  8. maxProcessors = "1000"
  9. enableLookups = "false"
  10. compression = "on"
  11. compressionMinSize = "2048"
  12. compressableMimeType = "text/html,text/xml,text/javascript,text/css,text/plain"
  13. connectionTimeout = "20000"
  14. URIEncoding = "utf-8"
  15. acceptCount = "1000"
  16. redirectPort = "8443"
  17. disableUploadTimeout = "true" />

1. Оптимизация памяти Tomcat

T Оптимизация памяти omcat в основном для оптимизации параметров запуска tomcat. Мы можем установить параметр JAVA_OPTS в сценарии запуска tomcat catalina.sh

1. Описание параметра JAVA_OPTS

  1. -сервер включает серверную версию jdk;
  2. -Минимальная память при инициализации виртуальной машины Xmsjava;
  3. -Максимальный объем памяти, доступный для виртуальной машины Xmxjava;
  4. -XX: постоянная область памяти PermSize
  5. -XX: максимальная постоянная зарезервированная область памяти MaxPermSize

Настройка параметров сервера

Серверная память компании обычно может быть добавлена ​​максимум до 2G, поэтому вы можете использовать следующую конфигурацию:

  1. JAVA_OPTS= ‘-Xms1024m-Xmx2048m-XX:PermSize=256M-XX:MaxNewSize=256m-XX:MaxPermSize=256m’

После завершения настройки вы можете перезапустить Tomcat и использовать следующую команду, чтобы проверить, действует ли конфигурация:

1. Сначала проверьте номер процесса Tomcat:

  1. sudolsof-i:9027

Мы видим, что номер процесса Tomcat — 12222.

1. Проверьте, вступает ли в силу конфигурация:

  1. sudojmap–heap12222

Мы видим, что MaxHeapSize и другие параметры вступили в силу. ,

2. Оптимизация параллелизма Tomcat

1. Параметры подключения Tomcat

В конфигурации <Connector . /> в файле конфигурации Tomcat server.xml

1. Описание параметров

minProcessors: минимальное количество незанятых потоков соединений, используемых для повышения производительности системной обработки, значение по умолчанию 10

maxProcessors: максимальное количество потоков соединений, то есть максимальное количество одновременно обрабатываемых запросов, значение по умолчанию — 75

acceptCount: максимально допустимое количество соединений, должно быть больше или равно maxProcessors, значение по умолчанию равно 100

enableLookups: для обратной проверки доменного имени, значение: true или false. Чтобы улучшить вычислительную мощность, следует установить значение false

connectionTimeout: время ожидания сетевого соединения, единица измерения: миллисекунды. Значение 0 означает, что время ожидания никогда не истекает, этот параметр имеет скрытые опасности. Обычно может быть установлено 30000 миллисекунд.

Параметры, относящиеся к максимальному количеству соединений: maxProcessors и acceptCount. Если вы хотите увеличить количество одновременных подключений, вы должны увеличить оба параметра.

Максимальное количество подключений, разрешенных веб-сервером, также зависит от параметров ядра операционной системы, обычно Windows составляет около 2000, Linux — около 1000.

2. Пример конфигурации в Tomcat

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. minProcessors = "100"
  5. maxProcessors = "1000"
  6. acceptCount = "1000"
  7. redirectPort = "8443"
  8. disableUploadTimeout = "true" />

2. Отрегулируйте параллельную обработку разъема

1. Описание параметров

maxThreads Максимальное количество клиентских запросов

minSpareThreadsNumber потоков сокетов, созданных при инициализации Tomcat

maxSpareThreadsМаксимальное количество потоков незанятых сокетов для коннектора Tomcat

enableLookups Если установлено значение true, разрешение имен доменов поддерживается, и IP-адреса могут быть преобразованы в имена хостов.

redirectPort Когда требуется безопасный сценарий на основе канала, перенаправляйте клиентские запросы на redirectPort на основе SSL

acceptAccount Максимальное количество очередей прослушивающих портов. После заполнения клиентский запрос будет отклонен (не может быть меньше maxSpareThreads)

connectionTimeout тайм-аут соединения

Минимальное количество потоков обработки при создании сервера minProcessors

Максимальный поток одновременной обработки на сервере maxProcessors

URIEncoding Унифицированная кодировка URL

2. Пример конфигурации в Tomcat

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. maxThreads = "1000"
  5. minSpareThreads = "100"
  6. maxSpareThreads = "1000"
  7. minProcessors = "100"
  8. maxProcessors = "1000"
  9. enableLookups = "false"
  10. URIEncoding = "utf-8"
  11. acceptCount = "1000"
  12. redirectPort = "8443"
  13. disableUploadTimeout = "true" />

3. Оптимизация кэша Tomcat

1. Описание параметров

c ompression Включить компрессию

compressionMinSize Размер содержимого вывода с включенным сжатием, по умолчанию 2 КБ

compressableMimeType Тип сжатия

connectionTimeout Определите время для установления тайм-аута клиентского соединения. Если оно равно -1, это означает, что время для установления клиентского соединения не ограничено

2. Пример конфигурации в Tomcat

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. maxThreads = "1000"
  5. minSpareThreads = "100"
  6. maxSpareThreads = "1000"
  7. minProcessors = "100"
  8. maxProcessors = "1000"
  9. enableLookups = "false"
  10. compression = "on"
  11. compressionMinSize = "2048"
  12. compressableMimeType = "text/html,text/xml,text/javascript,text/css,text/plain"
  13. connectionTimeout = "20000"
  14. URIEncoding = "utf-8"
  15. acceptCount = "1000"
  16. redirectPort = "8443"
  17. disableUploadTimeout = "true" />

4. Эталонная конфигурация

1. Старая конфигурация

Сервер был настроен следующим образом со ссылкой на сеть. Извлеките его и поделитесь им:

  1. <Connector port = "9027"
  2. protocol = "HTTP/1.1"
  3. maxHttpHeaderSize = "8192"
  4. maxThreads = "1000"
  5. minSpareThreads = "25"
  6. maxSpareThreads = "75"
  7. enableLookups = "false"
  8. compression = "on"
  9. compressionMinSize = "2048"
  10. compressableMimeType = "text/html,text/xml,text/javascript,text/css,text/plain"
  11. connectionTimeout = "20000"
  12. URIEncoding = "utf-8"
  13. acceptCount = "200"
  14. redirectPort = "8443"
  15. disableUploadTimeout = "true" />

Позже было обнаружено, что узкие места в работе возникали, когда число посещений достигало более 3 миллионов.

2. Измененная конфигурация

Как сделать простым и понятным запуск Java-процессов в Linux / Docker

По профилю работы DevOps-инженером я часто занимаюсь автоматизацией установки и настройки разнообразных IT-систем в различных средах: от контейнеров до облака. Приходилось работать со многими системами, основанными на Java-стеке: от небольших (вроде Tomcat), до масштабных (Hadoop, Cassandra и др.).

При этом почти каждая такая система, даже самая простая, почему-то имела сложную неповторимую систему запуска. Как минимум, это были многострочные shell-скрипты, как в Tomcat, а то и целые фреймворки, как в Hadoop. Мой нынешний «пациент» из этой серии, вдохновивший меня на написание этой статьи — хранилище артефактов Nexus OSS 3, скрипт запуска которого занимает

Непрозрачность, избыточность, запутанность startup-скриптов создает проблемы даже при ручной установке одного компонента на локальной системе. А теперь представьте, что набор таких компонентов и сервисов нужно запаковать в Docker-контейнер, попутно написав еще один слой абстракции для мало-мальски адекватного оркестрирования, развернуть в Kubernetes-кластере и реализовать этот процесс в виде CI/CD-пайплайна.

Короче говоря, давайте на примере упомянутого Nexus 3 разберемся, как вернуться из лабиринта shell-скриптов к чему-то более похожему на java -jar <program.jar> , учитывая наличие удобных современных DevOps-инструментов.

Откуда такая сложность?

Если в двух словах, то в древние времена, когда при упоминании UNIX не переспрашивали: «в смысле, Linux?», не было Systemd и Docker и др., для управления процессами использовались переносимые shell-скрипты (init-скрипты) и PID-файлы. Init-скрипты задавали необходимые настройки окружения, которые в разных UNIX-ах были свои, и, в зависимости от аргументов, запускали процесс или перезапускали/останавливали его с помощью ID из PID-файла. Подход простой и понятный, но эти скрипты переставали работать при каждой нестандартной ситуации, требуя ручного вмешательства, не позволяли запустить несколько копий процесса… но не суть.

Так вот, если внимательно посмотреть на упомянутые выше startup-скрипты в Java-проектах, то можно в них разглядеть явные признаки этого доисторического подхода, включая даже упоминания SunOS, HP-UX и других UNIX-ов. Как правило, такие скрипты делают примерно следующее:

  • используют синтаксис POSIX shell со всеми его костылями для UNIX/Linux-переносимости
  • определяют версию и релиз ОС через uname , /etc/*release и т.п.
  • ищут JRE/JDK в укромных уголках файловой системы и выбирают наиболее «подходящую» версию по хитрым правилам, иногда еще и специфичным для каждой ОС
  • рассчитывают числовые параметры JVM, например, размер памяти ( -Xms , -Xmx ), количество потоков GC и др.
  • оптимизируют JVM через -XX -параметры с учетом специфики выбранной версии JRE/JDK
  • отыскивают свои компоненты, библиотеки, пути к ним по окружающим директориям, конфигурационным файлам и т.п.
  • настраивают окружение: ulimits, переменные среды и т.п.
  • генерируют CLASSPATH циклом типа: for f in $path/*.jar; do CLASSPATH=»$:$f»; done
  • парсят аргументы командной строки: start|stop|restart|reload|status|.
  • собирают Java-команду, которую в итоге нужно выполнить, из перечисленного выше
  • и, наконец, выполняют эту Java-команду. Зачастую при этом явно или неявно используются все те же пресловутые PID-файлы, & , nohup , специальные TCP-порты и прочие трюки из прошлого столетия (см. пример из Karaf)

Упомянутый скрипт запуска Nexus 3 — подходящий пример такого скрипта.

По сути, вся перечисленная выше скриптовая логика, как бы, пытается заменить системного администратора, который бы установил и настроил все вручную под конкретную систему от начала до конца. Но вообще любые требования самых разнообразных систем учесть, в принципе, невозможно. Поэтому получается, наоборот, головная боль, как для разработчиков, которым нужно поддерживать эти скрипты, так и для системных инженеров, которым в этих скриптах потом нужно разбираться. С моей точки зрения, системному инженеру гораздо проще один раз разобраться в параметрах JVM и настроить ее как надо, чем каждый раз при установке новой системы разбираться в тонкостях ее startup-скриптов.

Что же делать?

У — про — щать! KISS и YAGNI нам в руки. Тем более, что на дворе 2018-й год, а это значит, что:

  • за очень редким исключением, UNIX == Linux
  • задача управления процессами решена как для отдельного сервера (Systemd, Docker), так и для кластеров (Kubernetes и т.п.)
  • появилась куча удобных инструментов управления конфигурациями (Ansible и др.)
  • в администрирование пришла и уже основательно закрепилась тотальная автоматизация: вместо ручной настройки хрупких неповторимых «серверов-снежинок» теперь можно автоматически собирать унифицированные репродуцируемые виртуальные машины и контейнеры с помощью целого ряда удобных инструментов, включая упомянутые выше Ansible и Docker
  • повсеместно используются инструменты сбора runtime-статистики, как для самой JVM (пример), так и для Java-приложения (пример)
  • и, самое главное, появились специалисты: системные и DevOps-инженеры, которые умеют использовать перечисленные выше технологии и понимают, как правильно установить JVM на конкрентной системе и впоследствии подстроить ее с учетом собранной runtime-статистики

Так что давайте снова пройдемся по функционалу startup-скриптов еще раз с учетом перечисленных пунктов, не пытаясь при этом делать работу за системного инженера, и уберем оттуда все «лишнее».

  • синтаксис POSIX shell ⇒ /bin/bash
  • определение версии ОС ⇒ UNIX == Linux, если есть ОС-специфичные параметры, можно описать их в документации
  • поиск JRE/JDK ⇒ у нас единственная версия, и это OpenJDK (ну или Oracle JDK, если уж очень нужно), java и компания есть в стандартном системном пути
  • расчет числовых параметров JVM, тюнинг JVM ⇒ это можно описать в документации по скалированию приложения
  • поиск своих компонентов и библиотек ⇒ описать структуру приложения и способы ее настройки в документации
  • настройка окружения ⇒ описать в документации требования и особенности
  • генерация CLASSPATH ⇒ -cp path/to/my/jars/* или даже, вообще, Uber-JAR
  • парсинг аргументов командной строки ⇒ аргументов не будет, т.к. обо всем, кроме запуска, позаботится менеджер процессов
  • сборка Java-команды
  • выполнение Java-команды

В итоге, нам нужно просто собрать и выполнить Java-команду вида java <opts> -jar <program.jar> с помощью выбранного менеджера процессов (Systemd, Docker и т.п.). Все параметры и опции ( <opts> ) мы оставляем на усмотрение системного инженера, который подстроит их под конкретную среду. Если список опций <opts> довольно длинный, можно вновь вернуться к идее startup-скрипта, но, в этом случае, максимально компактного и декларативного, т.е. не содержащего никакой программной логики.

Пример

В качестве примера давайте посмотрим, как можно упростить скрипт запуска Nexus 3.

Самый простой вариант, чтобы не залезать в дебри этого скрипта — просто запустить его в реальных условиях ( ./nexus start ) и посмотреть на результат. Например, можно найти полный список аргументов запущенного приложения в таблице процессов (через ps -ef ), или запустить скрипт в режиме отладки ( bash -x ./nexus start ), чтобы наблюдать весь процесс его выполнения и в самом конце — команду запуска.

Вначале применим к ней пару простых приемов:

  • поменяем /the/long/and/winding/road/to/my/java на java , ведь она есть в системном пути
  • поместим список Java-параметров в отдельный массив, отсортируем его и уберем дубликаты

Теперь можно идти в глубину.

Install4j — это такой графический Java-инсталлятор. Похоже, что он используется для начальной установки системы. На сервере он нам не нужен, убираем.

Договоримся о размещении компоненты и данные Nexus на файловой системе:

  • поместим само приложение в /opt/nexus-<version>
  • для удобства создадим символическую ссылку /opt/nexus -> /opt/nexus-<version>
  • сам скрипт разместим вместо исходного как /opt/nexus/bin/nexus
  • все данные нашего Nexus будут лежать на отдельной файловой системе, смонтированной как /data/nexus

Само создание каталогов и ссылок — удел систем управления конфигурациями (на все про все 5-10 строчек в Ansible), поэтому оставим эту задачу системным инженерам.

Пусть наш скрипт при запуске меняет рабочий каталог на /opt/nexus — тогда мы сможем поменять пути к компонентам Nexus на относительные.

Опции вида -Dkaraf.* — это настройки Apache Karaf, OSGi-контейнера, в который, очевидно, «запакован» наш Nexus. Поменяем karaf.home , karaf.base , karaf.etc и karaf.data соответственно размещению компонентов, по возможности используя относительные пути.

Видя, что CLASSPATH состоит из списка jar-файлов, которые лежат в одном каталоге lib/ , заменим весь этот список на lib/* (придется также выключить wildcard expansion с помощью set -o noglob ).

Поменяем java на exec java , чтобы наш скрипт на запускал java как дочерний процесс (менеджер процессов этот дочерний процесс просто не увидит), а «заменял» себя на java (описание exec).

Посмотрим, что нас получилось:

Итого всего 27 строчек вместо >400, прозрачно, понятно, декларативно, никакой лишней логики. При необходимости этот скрипт легко превратить в темплейт для Ansible/Puppet/Chef и добавить туда только ту логику, которая нужна для конкретной ситуации.

Этот скрипт можно использовать в качестве ENTRYPOINT в Dockerfile или вызывать в unit-файле Systemd, заодно подстроив там ulimits и другие системные параметры, например:

Заключение

Какие выводы можно сделать из этой статьи? В принципе, все сводится к паре пунктов:

  1. У каждой системы свое предназначение, т.е., не нужно забивать гвозди микроскопом.
  2. Простота (KISS, YAGNI) рулит — реализовывать только то, что нужно для данной конкретной ситуации.
  3. И самое главное: круто, что есть IT-специалисты разного профиля. Давайте будем взаимодействовать и делать наши IT-системы проще, понятнее и лучше! 🙂

Спасибо за внимание! Буду рад обратной связи и конструктивной дискуссии в комментариях.

JAVA_OPTS Environment Variable

JAVA_OPTS is an environment variable that you can set to pass custom settings to the Java Virtual Machine (JVM) that runs Liquibase .

Some common use cases for the JAVA_OPTS environment variable are as follows:

Setting Liquibase properties

You can include all Liquibase properties in the Liquibase properties file, or you can set them as Java system properties by using the JAVA_OPTS variable. If you are using an earlier version of Liquibase , you must set them using JAVA_OPTS . For a list of available Liquibase properties, see Create and Configure a liquibase.properties File.

You can set one property at a time, or set multiple properties separated by a whitespace character. For example, to set the changelog-lock-poll-rate property when using the update command, open the command line and pass arguments to JAVA_OPTS using the -Dproperty=value format. On Mac/Linux machine, the syntax is as follows:

The syntax on Windows requires the set command:

Note: In Liquibase version 4.4.0 and above, the syntax for command options has been altered, so changelog-file is now changelog-file . The old format is backwards compatible with 4.4.0, but the new format will not work in older versions of Liquibase .

Memory Allocation

You can use the JAVA_OPTS variable to allocate memory for Liquibase commands in the JVM. By default, the amount of memory available to the JVM is based on your total system memory. The specify a system with 1 GB of RAM. However, using Liquibase commands like update on large databases may require additional memory.

For example, to set the maximum size of the memory heap that the JVM can access while executing the Liquibase generate-changelog command, you can use the -Xmx<value><unit> option as part of the value of the JAVA_OPTS variable. On a Mac/Linux machine, the syntax is as follows:

The syntax on Windows is:

Database Connection

Another use case for the JAVA_OPTS variable is to establish a secure database connection using Liquibase , such as with the Kerberos authentication protocol. An example command that you can use with an Oracle database on a Mac/Linux machine is as follows:

Note: These commands only apply to the current shell. To set permanent environment variables, see Liquibase Environment Variables.

How do I use the JAVA_OPTS environment variable?

How do I use the JAVA_OPTS variable to configure a web server (a linux server)?

How can I set -Djava.awt.headless=true using JAVA_OPTS ?

6 Answers 6

JAVA_OPTS is the standard environment variable that some servers and other java apps append to the call that executes the java command.

For example in tomcat if you define JAVA_OPTS=’-Xmx1024m’ , the startup script will execute java org.apache.tomcat.Servert -Xmx1024m

If you are running in Linux/OSX, you can set the JAVA_OPTS, right before you call the startup script by doing

This will only last as long as the console is open. To make it more permanent you can add it to your

Java opts как правильно выставить параметры

LabKey Server is Java web application that runs on Tomcat. Many important Tomcat configuration settings can be defined using properties defined in CATALINA_OPTS or JAVA_OPTS, or set via utility, depending on your platform. The primary example in this topic is configuring memory configurations, but other flags can also be set using these methods.

The Tomcat server is run within a Java Virtual Machine (JVM). This JVM that controls the amount of memory available to LabKey Server. LabKey recommends that the Tomcat web application be configured to have a maximum Java Heap size of at least 2GB for a test server, and at least 4GB for a production server.

Locate Tomcat and the Settings File

  • <CATALINA_HOME>: Installation location of the Apache Tomcat Web Server. If you are following our recommended folder configuration, the location will be (where #.#.## is the specific version installed):
  • On Linux or OSX, you may also have created a symbolic link /usr/local/tomcat to this location.

Method 1: If Tomcat is Running as a Service (Most common)

  • Locate the tomcat.service file. For example, it might be /etc/systemd/system/tomcat.service (or tomcat_lk.service)
  • Open the file and look for the CATALINA_OPTS parameter.
    • If you don’t see this in the file for a running server, proceed to check via another method.

    Method 2: If Tomcat is not Running as a Service

    • /etc/systemd/system
    • /etc/default
    • /usr/local/jsvc/
    • <CATALINA_HOME>/bin/
    • tomcat.service
    • tomcat_lk.service
    • Tomcat#.sh
    • tomcat
    • setenv.sh

    Method 3: If you use JSVC to start/stop LabKey Server

    • Find the JSVC service script.
      • On Linux servers, this is usually in the /etc/init.d directory and named either «tomcat» or «tomcat#»
      • On OSX servers this might be in /usr/local/jsvc/Tomcat#.sh

      Method 4: If you use startup.sh and shutdown.sh to start/stop LabKey Server (Legacy method)

Добавить комментарий

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