Настройка Jboss и MySQL

Для того, чтобы система работала наилучшим образом, нужно использовать достаточно быстрые диски и файловую систему, настраивать под используемое оборудование MySQL и Jboss, минимизировать проблемы с сетью.

Здесь рассмотрим только настройки Jboss и MySQL.

В идеальном случае под сервер приложений и баз данных должны быть выделены отдельные машины, и на каждой машине сервер использует все ресурсы. Но, поскольку чаще всего это не так, будем считать, что половину свободной оперативной памяти использует JBoss-у, а вторую половину - MySQL. Точнее, от всей оперативной памяти отнимем то, что необходимо под ОС и прочие приложения, а остальное поделим пополам.

Будем считать, что мы можем отдать 4ГБ серверу приложений и столько же - MySQL.

Настройка Jboss

Увеличиваем память для 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

  1. Настраиваем 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&amp;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.

  1. В некоторых системах, несмотря на настройку max_connections, количество соединений после запуска MySQL остается 214. В основном такая проблема возникает в Debian Jessie, где используется система инициализации systemd.

Решение проблемы для системы Debian Wheezy (SysV)

В файле /etc/pam.d/common-session добавляем строку:

session required pam_limits.so

Figure 3.1. Файл common-session

Файл common-session

Редактируем файл /etc/security/limits.conf и добавляем такие настройки:

*               soft    nofile          65535
*               hard    nofile          65535
root            soft    nofile          65535
root            hard    nofile          65535

Figure 3.2. Файл limits.conf

Файл limits.conf

Для mysql создаем отдельный файл настроек /etc/security/limits.d/mysql-maxopenfiles.conf:

mysql   soft    nofile  102400
mysql   hard    nofile  102400

Figure 3.3. Файл mysql-maxopenfiles.conf

Файл mysql-maxopenfiles.conf

Проверяем поменялся ли лимит (значение open files должно быть 102400):

su - mysql -c "ulimit -a" -s '/bin/bash'

Figure 3.4. Значение open files

Значение open files

Перезапускаем mysql и проверяем значение max_connections:

show variables like '%max_connections%';

Figure 3.5. Значение max_connections

Значение 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

Figure 3.6. Файл limits.conf

Файл limits.conf

Перезапускаем демон:

systemctl daemon-reload
systemctl restart mysql

После запуска проверяем значение max_connections:

show variables like '%max_connections%';