Форум OlegON > Программы и оборудование для автоматизации торговли > Кассовые программы > УКМ-4

Количество соединений при обновлении : УКМ-4

20.04.2024 0:59


04.02.2015 23:06
forever
 
Здравствуйте.

При обновлении УКМ ловлю стабильно ошибку

Код:
2015/02/04 19:37:37|"C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd" "" starting
===================================
==         "C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd"
===================================
EXECUTING: common-srv-dat. cmd
==== ukmserver-upgrade. sql started ==========================
ERROR 1226 (42000): User 'ukm_server' has exceeded the 'max_user_connections' resource (current value: 100)
===================================
ERROR:   "C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd" failed
===================================
2015/02/04 19:37:37| 
2015/02/04 19:37:37|---- ERROR ----
2015/02/04 19:37:37| 
2015/02/04 19:37:37|ERROR: Failed to process package 00062000.dat.s.zip. "C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd"  failed
на запрос напрямую к БД получаю ограничение 100

Код:
mysql> SELECT max_user_connections FROM mysql.user where host='localhost' AND user='ukm_server';
+----------------------+
| max_user_connections |
+----------------------+
|                  100 |
+----------------------+
1 row in set (0.10 sec)
изменения в my. ini с добавлением строки ничего не меняет

Код:
max_user_connections=300
вопрос:
1) почему так получается, если ранее обновления спокойно делал 58>62, а сейчас 58>63 ?
т.е. условия изменились только в добавлении новых архивов в обновление.
2) как исправить ситуацию?
05.02.2015 09:11
Dim
 
не поможет?
на фтп С+ в папке с дистрибутивами УКМ файл "Каналы связи.docx"
Цитата:
Настройка каналов связи
Разберем пример:
1 сервер на большое число магазинов и касс.
Используются подарочные карты и сертификаты
(150 касс, WindowsServer 2008 R2)
1. Настройка сервера
Первое, что нужно сделать – настроить сервер.
Если у нас СГО или же 1 сервер на несколько магазинов, тов обязательном порядке на сервере в реестре или с помощью командной строки настраиваем 2 параметра.
1) Параметр MaxUserPort
В WindowsServer 2003 количествоtcp сессийпо умолчанию было равно 3976 + 1025 зарезервированных.
Для того чтобы это исправить, нужно было в реестре в разделе:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersсоздатьпараметр:
MaxUserPort
типаREG_DWORD
со значением до 65536
Это позволяло увеличить число возможных одновременных подключений к серверу до 65536.

В WindowsVista, WindowsServer 2008, Windowsserver 2008 R2, Windows 7 значение этого параметра по умолчанию было изменено на 16382 (с 49652 до 65535) (обновление kb929851 от 04.2011)
Также стало возможным просмотреть значение этого параметра через командную строку
netshint ipv4 show dynamicporttcp
netshint ipv4 show dynamicportudp
netshint ipv6 show dynamicporttcp
netshint ipv6 show dynamicportudp
Чтобы установить другое значение этого параметра, теперь можно воспользоваться командой:
netshint ipv4 set dynamicporttcp start=10000 num=30000
netshint ipv4 set dynamicportudp start=10000 num=1000
netshint ipv6 set dynamicporttcp start=10000 num=1000
netshint ipv6 set dynamicportudp start=10000 num=1000

где:
start=начальный порт диапазона,
num=общее число портов, где минимальный диапазон портов, которые могут быть установлены — 255.
Минимальное значение начального порта (start) равно 1025.
Максимальное значение порта (start)(в зависимости от настройки диапазона) не может превышать 65535.
Также нужно учесть, что если на север был установлен ExchangeServer2007 а ОС семейства WindowsServer 2008, то начальный порт диапазона примет значение от 1025 до 60000.


2) Параметр TcpTimedWaitDelay
TcpTimedWaitDelay
Key: Tcpip\Parameters
Value Type: REG_DWORD—time in seconds
ValidRange: 30-300 (decimal)
Default: 0xF0 (120 decimal)
Description: This parameter determines the length of time that a connection stays in the TIME_WAIT state when being closed. While a connection is in the TIME_WAIT state, the socket pair cannot be reused. This is also known as the 2MSL state because the value should be twice the maximum segment lifetime on the network. SeeRFC 793 forfurtherdetails.

2. Рекомендации по количеству каналов
1) Резервирование каналов
При запуске службы УКМ резервирует число каналов, заданное на вебе в разделе масштабирование сервера.
Общей рекомендацией может послужить число каналов на экспорт, равное общему числу касс/3.
Причем при конфигурации единый север на много магазинов, можно исходить из меньшего числа каналов (1/5, 1/4 от общего числа терминалов).

Пример – Пусть будет 30
Каналы на импорт – 20 (импорт происходит быстрее, данных с касс выгружается меньше).
Параметр «Резерв количества каналов наМастер сервер»– обмен между СМами и СГО.
Каналы, отвечающие за обслуживание программ лояльности – это количество одновременно обслуживаемых запросов по обслуживанию подарочных сертификатов/карт и онлайн счетов.
Здесь тоже сильно задирать этот параметр не требуется.
Постарайтесь адекватно оценить, сколько людей могут одновременно на кассах расплачиваться подарочными картами (20).

В логах УКМ сервера будут сообщения – очередь, если очередь в этих сообщениях увеличивается (ранее было очередь на экспорт 72, через 20 минут стало - очередь на экспорт – 108), значит – каналов не хватает.
Также в разделе «Монитор оборудования/Кассы»– при нажатии на одну кассу можно посмотреть статус репликации на данную кассу, и очередь репликаций, если она есть.

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

2) Соединение (connect)с базой
Каждый из этих каналов создает 1 поток + 1 соединение (connect)с базой.
Число этих соединений с базой зависит от параметра max_connections – в файле my.ini, а также от значений MaxUserPort, и TcpTimedWaitDelay.
Если параметр max_connections был слишком большим, то на сервере может еще висеть куча соединений от старого запуска службы.

УКМсервер – 32 битное приложение, и может максимально отъедать 2Гб памяти (ну или 3 с дополнительными настройками сервера).
Каждый поток отъедает память.
Максимальное число холостых потоков примерно 130. Это потоки без нагрузки. На живом сервере значения меньше.
05.02.2015 11:41
forever
 
вышеописанные рекомендации для настройки версий от 60+
проблема не с сетевыми подключениями, а на уровне локальной БД одним пользователем этой БД при обновлении УКМ.
05.02.2015 12:43
vdm
 
Цитата:
изменения в my. ini с добавлением строки ничего не меняет
Ну это же глобальный лимит, на юзере ukm_server есть свой собственный.
Код:
GRANT USAGE ON *.* TO 'ukm_server'@'localhost'  WITH MAX_USER_CONNECTIONS 300;
05.02.2015 15:57
forever
 
даже 500 поставил:

Цитата:
2015/02/05 14:35:12|"C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd" "" starting
===================================
== "C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd"
===================================
EXECUTING: common-srv-dat. cmd
==== ukmserver-upgrade. sql started ==========================
ERROR 1226 (42000): User 'ukm_server' has exceeded the 'max_user_connections' resource (current value: 500)
===================================
ERROR: "C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd" failed
===================================
2015/02/05 14:35:12|
2015/02/05 14:35:12|---- ERROR ----
2015/02/05 14:35:12|
2015/02/05 14:35:12|ERROR: Failed to process package 00062000.dat.s.zip. "C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd" failed
2015/02/05 14:35:12|==== StartStopPrograms(errupdate) begin
05.02.2015 18:35
vdm
 
Тогда неплохо бы обратиться в С+.
100 коннектов уже ненормально, а больше и подавно.
Похоже на "скрипт долбится в базу, не отключая сессию при ошибке". Может в базе проблема, может в данных, может в скрипте обновления.

В логе самого mysql есть что-то интересное?
Другие базы (если есть) обновились без проблем?
05.02.2015 19:16
forever
 
вот как раз проверил на других БД.
проблема всегда только с БД СГО, т.е. на самой большой БД всей сети.
магазинные БД спокойно обновляются при тех же условиях.
05.02.2015 20:48
vdm
 
А помониторить процесслист в базе СГО в этот момент не пробовал?
Кто столько сессий создает.
Вдруг это не скрипт обновления, а подчиненные магазины ломятся.
05.02.2015 21:43
forever
 
я на стенде тестирую обновление. никто к ней не коннектится (порты изменены, не в первой :) )
а вот мониторить проблематично, так как ловить примерно спустя ~4 часа обновления.. т.е. уже по опыту 3 раза пробовал из бекапа обновить и примерно в один и тот же промежуток времени падает ошибка... кстати все время с строкой про архив 62 версии..
Цитата:
ERROR: Failed to process package 00062000.dat.s.zip. "C:\Program Files\ukmserver\ukmupman\temp_unpack\up. cmd" failed
06.02.2015 06:57
Mtirt
 
А если обновиться до 61 и последнего сервис-пака ?
А потом попробовать становить отдельно 62 версию?
Часовой пояс GMT +3, время: 00:59.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.