Для того, чтобы система работала наилучшим образом, нужно использовать достаточно быстрые диски и файловую систему, настраивать под используемое оборудование MySQL и Jboss, минимизировать проблемы с сетью.
Здесь рассмотрим только настройки Jboss и MySQL.
В идеальном случае под сервер приложений и баз данных должны быть выделены отдельные машины, и на каждой машине сервер использует все ресурсы. Но, поскольку чаще всего это не так, будем считать, что половину свободной оперативной памяти использует JBoss-у, а вторую половину - MySQL. Точнее, от всей оперативной памяти отнимем то, что необходимо под ОС и прочие приложения, а остальное поделим пополам.
Будем считать, что мы можем отдать 4ГБ серверу приложений и столько же - MySQL.
Увеличиваем память для jboss. Эти изменения вносятся в файл
/opt/synergy/jboss/bin/standalone.conf.d/30-synergy-bigload.conf
:
Требуется обозначить минимальный и максимальный размер памяти, который может быть использован Java:
# Minimum and maximum memory for Java Heap #JAVA_OPTS="$JAVA_OPTS -Xms2G -Xmx4G"
Здесь -Xms
- минимальный размер,
-Xmx
- максимальный.
Эти же параметры желательно закомментировать в файле
/opt/synergy/jboss/bin/standalone.conf.d/05-standard-memory-settings.conf
.
Чтобы настройки вступили в силу, нужно перезапустить Jboss:
/etc/init.d/arta-synergy-jboss restart
Настраиваем MySQL. Его настройки находятся в файле
/etc/mysql/conf.d/arta_synergy_performance.cnf
.
Обязательно надо выполнить следующие настройки (в секцию
mysqld):
увеличиваем количество соединений
max_connections
: необходимо выставить
его равным сумме MaxPoolSize
всех
датасорсов (смотреть в
/opt/synergy/jboss/standalone/configuration/standalone-onesynergy.xml
)
<xa-datasource jndi-name="java:/SynergyDS" pool-name="synergy_ds" enabled="true" use-ccm="false"> <xa-datasource-property name="URL"> jdbc:mysql://127.0.0.1:3306/synergy?useUnicode=true&characterEncoding=utf8 </xa-datasource-property> <driver>com.mysql</driver> <xa-pool> <min-pool-size>20</min-pool-size> --> <max-pool-size>400</max-pool-size> <is-same-rm-override>false</is-same-rm-override> <interleaving>false</interleaving> <pad-xid>false</pad-xid> <wrap-xa-resource>false</wrap-xa-resource> </xa-pool> . . . . . . </xa-datasource>
увеличиваем пулы для InnoDB:
innodb_buffer_pool_size = 3G
-
рекомендуют делать около 75% RAM, но поскольку максимум
можем отдать MySQL только 50% общей памяти, отдаем 75%
от 50%
Чтобы настройки вступили в силу, надо перезапустить Mysql. При этом надо помнить, что mysql можно перезапускать только при остановленном Jboss.
В некоторых системах, несмотря на настройку
max_connections
, количество соединений
после запуска MySQL остается 214
. В
основном такая проблема возникает в Debian Jessie, где
используется система инициализации systemd.
Решение проблемы для системы Debian Wheezy (SysV)
В файле /etc/pam.d/common-session
добавляем
строку:
session required pam_limits.so
Редактируем файл /etc/security/limits.conf
и
добавляем такие настройки:
* soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535
Для mysql создаем отдельный файл настроек
/etc/security/limits.d/mysql-maxopenfiles.conf
:
mysql soft nofile 102400 mysql hard nofile 102400
Проверяем поменялся ли лимит (значение open files должно быть 102400):
su - mysql -c "ulimit -a" -s '/bin/bash'
Перезапускаем mysql и проверяем значение
max_connections
:
show variables like '%max_connections%';
Решение проблемы для системы Debian Jessie (systemd)
Выполняем команду:
mkdir /etc/systemd/system/mysql.service.d
Создаем файл
/etc/systemd/system/mysql.service.d/limits.conf
с таким содержанием:
[Service] LimitNOFILE=10000 LimitMEMLOCK=10000
Перезапускаем демон:
systemctl daemon-reload systemctl restart mysql
После запуска проверяем значение
max_connections
:
show variables like '%max_connections%';