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