Для того, чтобы система работала наилучшим образом, нужно использовать достаточно быстрые диски и файловую систему, настраивать под используемое оборудование 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%';