Конфигурация базы данных, память

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

В конфигурации приложения должна быть определена как минимум одна главная (мастер) база. Эта база постоянно актуальна и может выполнять как запросы обновления, так и выборок. В *.properteis конфигурации приложения биллинга определены хост, порт MySQL, имя базы данных и учётные данные для MySQL, например так:

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.184.245/bgbilling?useUnicode=true&characterEncoding=UTF-8&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&elideSetAutoCommits=true&useCursorFetch=true&queryTimeoutKillsConnection=true
db.user=bill
db.pswd=bgbilling
db.maxIdle=10
db.maxActive=50

Параметр db.maxIdle определяет максимально число простаивающих в данный момент соединений с базой данных; простаивающие соединения, выходящие за данное количество, закрываются. При большом одновременном количестве запросов к приложению биллинга число активных соединений растёт, по мере надобности устанавливаются новые соединения с MySQL, добавляясь в пул. При достижении активного количества соединений db.maxActive создание соединений прекращается, потоки ожидают освобождения уже занятых соединений.

Каждое приложение биллинга способно возвращать свой статус, вызовом *_status.* скрипта (server_status.sh, radius_status.sh). Сообщение о статусе приложения обязательно содержит время старта приложения и время работы, информацию по соединениям с базой данных и используемой памяти. Рассмотрим как пример вывод server_status.sh:

BGBillingServer v 4.6 build 333 from 01.03.2009
Started: 11.03.2009 16:29:49 Uptime: 0 d 00:00:05
Memory total: 6 045 696; max: 66 650 112; free: 2 975 800
Connections pool to Master status Idle: 1; Active: 0; maxActive: 4; maxIdle: 10
Connections pool to Slave "1" status Idle: 0; Active: 0; maxActive: 4; maxIdle: 10

В верхней строке отображается версия, номер и дата билда приложения (ядра для сервера). Далее - время старта и время работы.

Затем - использование ОЗУ. Параметр max определяет максимальный объем памяти, которую Java-машина может получить у операционной системы; total - сколько реально отобрано Java-машиной памяти в настоящий момент; free - сколько из этой реально выделенной памяти свободно.

По мере работы сборщик мусора освобождает неиспользуемую память. Если использование памяти все равно растёт - увеличивается параметр total. Однако он никогда не может превысить порога, заданного max. Размер памяти max можно увеличивать, изменяя число после параметра -Xmx в скрипте запуска приложения. На 32х разрядных ОС невозможна установка параметра max более 1.5 Гб. При нормальной работе приложения total не должен достигать max.

Последние строки (одна или более) отображают статусы пулов соединений к мастер и слейв базам данных.