18.02.16 — 16:17
Добрый день.
Имеется вот такой зверь.
Windows Server 2008R2
ОЗУ : 64 Гб.
Xeon E5. 2.4 Ггц x 6.
Дисковая система.
MS SQL 2012.
Под него выделено 40 Гб ОЗУ.
Протокол связи с сервером 1C — Shared Memory.
Раздел C:
2 SATA диска. RAID 1. 1TB
Временное хранение бекапов, исполняемые файлы.
Раздел E:
2 SSD Intel . RAID 1. 120 Гб
Логи SQL баз + tempdb.
Раздел F:
4 SAS. RAID 10. 600 Гб.
Хранятся файлы БД.
На сервере установлен сервер 1С+SQL+Терминалы+WTWare.
Большая часть клиентов грузяться с тонких клиентов по RDP.
Подключаются под одной учетной записью и каждый дальше уже в самой 1С проходит аутентификацию.
Работает порядка 20-25 человек.
Основная работа ведется УТ 10.3. Объем базы 26 Гб.
Так же имеется БП 3.0 . В ней работают 2 человека. Объем базы 30 Гб.
Суть проблемы : время от времени начинают подвисать платформа при работе с формами. Например при открытии/закрытии РТУ и тд.Может занимать 3-6 секунд. Пробовал чистить кэш пользователя, переставил платформу/сервер до версии 8.3.6.2449 — безрезультатно.
Свободной оперативной памяти достаточно, процессор не загружен.
Дисковой активности не заметил.
Вот и возникло несколько вопросов.
С чем могут быть связаны такие вот тормоза ? В момент их появления ничего на сервере не менялось и не устанавливалось.
1 — 18.02.16 — 16:23
Вчера лично стал свидетелем такого поведения. Подключился к серверу, при попытке открыть документ РТУ наблюдалось провисание на 3-4 секунды, так же они закрывались. Закрыл/открыл новый сенас, под тем же пользователем — работало как нужно. Ночью запустил реструктуризацию и пересчет итогов. Результат тот же.
2 — 18.02.16 — 18:08
Подведу итог. Что может влиять на скорость открытия/закрытия в 1С ?
3 — 18.02.16 — 18:13
в режиме отладки? или в любом режиме?
4 — 18.02.16 — 18:15
Сеть какая? Файловая или Серверная?
5 — 18.02.16 — 18:15
А. Вижу, Серверная
6 — 18.02.16 — 18:18
(3) пользователи запускают 1С ку в режиме предприятия. Могут 15 работать нормально, у двоих временное такие фризы. Потом фризы могут начаться у других. Понять в чем беда не могу. Сегодня хочу для половины сотрудников завести отдельных пользователей для подключения по RDP, чтоб у каждого была своя папка со своим кешем и зодно обновлю 1С ку до версии 8.3.7.1917 .
7 — 18.02.16 — 18:21
попробуй также 8.3.8
8 — 18.02.16 — 18:23
Выноси пользователей на локальные тонкие клиенты.
9 — 18.02.16 — 18:23
(7) смешно:)
(4) в операторском зале стоит 1гб коммутатор. Часть клиентов подключены к нему напрямую . Другая часть через мыльницы. Увы досталось в хозяйство в таком виде и успешно работало год.
10 — 18.02.16 — 18:24
(9) на полном серьёзе — поиск летает там
11 — 18.02.16 — 18:28
(8) Не совсем понял, можно чуть развернуть совет ?
12 — 18.02.16 — 18:32
(10) не имею желания тестовую версию ставить на работающий (хоть и с непонятными фризами) сервер 🙂
13 — 18.02.16 — 18:48
(6)[Понять в чем беда не могу.]
а ты и не пробывал
нет ни счетчиков
ни замера в 1С
нет даже тех.журнала
14 — 18.02.16 — 18:51
15 — 18.02.16 — 19:11
(13) (14) спасибо, настрою счетчики и посмотрю . Везде где натыкаюсь на информацию о замере производительности по счетчикам, натыкаюсь на английские названия. Буду сейчас добавлять и замерять.
16 — 18.02.16 — 19:16
(15)[Везде где натыкаюсь на информацию о замере производительности по счетчикам, натыкаюсь на английские названия]
и чё ?
17 — 18.02.16 — 19:17
(16) все хороршо, перевожу и добавляю)
18 — 18.02.16 — 19:38
Про режим энергопотребления уже было ? Выставлено в «максимальная производительность» ?
19 — 18.02.16 — 19:58
(18) выставлено в максимальную изначально.
Сегодня не успеваю уже, попробую завтра днем снять счетчики и с конкретными цифрами вернусь сюда.
20 — 18.02.16 — 21:00
(19) может программера допросить с паяльником? Наверняка он каких нибудь тупых запросов понавставлял.
21 — 18.02.16 — 21:28
Стесняюсь спросить, регламенты работают на sql?
22 — 19.02.16 — 00:17
(21) Настраивал, согласно тех же рекомендаций в сети. http://www.picshare.ru/view/7119538/
Нигде на накосячил ?
(20) тоже не исключал вариант, так как недавно сторонний программист вносил свои коррективы в работу конфигурации. Несколько раз сам оптимизировал код, в итоге отключил процедуру, которая могла в теории влиять на производительность сервера.
Проблема проявляется следующим образом. Пользователь работает и все нормально. Потом внезапно начинают долго открываться/закрываться документы. Решается или простым ожиданием или же закрыть/открыть сессию заново.
23 — 19.02.16 — 00:31
(0)Регламентные задания какие крутятся в базе?
24 — 19.02.16 — 00:54
(23) Вот скриншот http://www.picshare.ru/view/7119567/ .
Вроде полнотекстовый поиск отключали через Предприятие.
Операции — Управление полнотекстовым поиском — Настройка — Разрешить полнотекстовый поиск.
А тут его обновление стартует каждые пять минут.
25 — 19.02.16 — 00:56
Даже меньше, каждые 2,5 минуты.
26 — 19.02.16 — 00:57
(25)Попробуй на время отключить все активные задания и смотри что будет. Если все ок, то постепенно стартуй по одному, так и найдешь виновника.
27 — 19.02.16 — 01:00
(26) спасибо, обновлять платформу+сервер это блажь ? Не нужно ?
28 — 19.02.16 — 01:31
(27)Обновлять можно конечно, только всегда есть шанс, что после обновления станет еще хуже)
29 — 19.02.16 — 01:36
(28) тогда оставлю это на потом 🙂 Отрубил регламентное задание по обновлению полнотекстового индекса. Завтра посмотрим.
Вопрос в догонку по обновлению. Назад переехать на 8.3.6 можно с 8.3.7 ? Нет ли подводных камней ?
30 — 19.02.16 — 14:05
Хочу замерить производительность дисковой системы.
Кто подскажет,показатели каких счетчиков считаются приемлемыми при работе MS SQL ?
31 — 19.02.16 — 14:18
(29) не надо переезжать обратно
32 — 19.02.16 — 15:04
Может обмен с сайтом в фоновых висит
33 — 19.02.16 — 15:12
(31) понял, спасибо.
(32) смотрю в консоли заданий — все пусто.
Запустил все счетчики по дисковой системе. Смотрю. Из аномального — кратковременные скачки длинны очереди диска. Запущу сборщик данных, проверю.
Buffer cache hit ratio почти всегда 98-100. Оперативной памяти SQL хватает.
Процессор в пике 12-14 процентов.
С утра было несколько замечаний и пока тишина. Ждем.
34 — 19.02.16 — 15:19
Из настроек сервера.
Количество ИБ на рабочий процесс — 8
Количество соединений на процесс — 8.
Настройки кластера :
Допустимый объем памяти — 1500000 КБ
Интервал допустимого объема памяти — 600 сек
35 — 19.02.16 — 16:01
Вот сейчас поймал момент. Долгое открывание документов.По счетчикам , указанным на ИТС все отлично, а пользователи ноют. Снял замер производительности у пользователя. Вот ссылка.
https://yadi.sk/d/k9wDhP5Yp7cKW
МОжет кто нибудь глянуть ?
Склоняюсь к мысли апдейта ночью платформы и сервера. Если не спасет, но перетряхнуть весь сервер. Понимаю что не самое элегантное решение, но руки опускаются.
36 — 19.02.16 — 16:18
(24) Почему время выполненного задания 20.02.2016? Сегодня только еще 19.02.2016
37 — 19.02.16 — 16:59
(36) на сервере стоит +1 день.
38 — 19.02.16 — 17:10
(37) это хуже, чем плохо, это катастрофа
39 — 19.02.16 — 17:24
(38) Можно подробнее ?
40 — 19.02.16 — 17:39
Дополнительная информация о дисковой системе.
C: RAID 1 . Страйп — 256 кб . Размер кластера — 4096 байт
E: RAID 1 . Страйп — 64 кб. Размер кластера — 64 кб.
F: RAID 10. Страйп — 32 кб. Размер кластера — 64 кб.
Вот такая солянка.
41 — 19.02.16 — 17:49
(40)Да по описанию все норм.. проблема же может быть в конкретном диске. Хотя не похоже — если бы что то с дисками было, то тормоза явно бы чаще проявлялись.
P.s. Регламентые задания все поотключали?
42 — 19.02.16 — 18:00
(41) Смущает разница страйпа и размера кластера просто.
да, через консоль заданий отрубил обновление полнотекстового индекса. Остальное в течении дня не запускалось.
Ночью ставлю 8.3.7 актуальный релиз. Если не спасет , буду перетрухивать сервер. Недельная головоломка выбила из колеи меня 🙁
43 — 23.02.16 — 15:23
Обновление до 8.3.7 не спасло. Еще больше смутило что вчера не было тормозов, сегодня снова жалобы.
Снял ряд показаний с счетчиков.В момент сбора данных люди сталкивались с фризами.
https://yadi.sk/d/0nOGxZ9FpMNBF
Из того что бросилось в глаза, это скачки по очереди диска F: это раздел с данными БД. RAID 10 (4*SAS). Размер сектора 64 кб, размер страйпа 32 кб. Смущает это разница между страйпом и размером сектора. Не может ли это влиять ?
44 — 23.02.16 — 18:16
Предполагаю что проблема не носит характера 1С. Перезапуск RDP сеанса кратковременно позволяет работать без фризов. Пора заканчивать эту историю, в выходные переставлю сервер целиком, заодно настрою массивы под SQL c размером страйпа в 64 кб.
45 — 24.02.16 — 11:36
настрой технологический журнал 1с на операции больше 5 секунд. проанализируй. если будет пусто, то 2 секунды и т.п.
46 — 24.02.16 — 19:23
(45) Подсмотрел в желтой книге образец, не затруднит глянуть ? Прошу прощения что общим текстом, не понял какой тег позволяет выделить код в сообщении.
P.S. День когда я решу это проблем я отмечу салютом !
<config xmlns=»http://v8.1c.ru/v8/tech-log»>;
<log history=»7″ location=»c:logs»>
<event>
<eq property=»name» value=»dbmssql»/>
</event>
<property name=»sql»>
<event>
<eq property=»name» value=»mssql»/>
<gt property=»duration» value=»50000″/>
</event>
</property>
</log>
</config>
47 — 24.02.16 — 19:29
у меня так для отлова всего, что больше 0.1 секунды. соответственно, duration надо увеличить пропорционально:
<?xml version=»1.0″ encoding=»UTF-8″?>
<config xmlns=»http://v8.1c.ru/v8/tech-log»>
<dump create=»true» type=»0″ prntscrn=»false»/>
<log history=»2″ location=»D:Технологический журнал 1с»>
<property name=»all»/>
<event>
<eq property=»name» value=»SDBL»/>
<gt property=»duration» value=»1000″/>
</event>
<event>
<eq property=»name» value=»DBMSSQL»/>
<gt property=»duration» value=»1000″/>
</event>
</log>
<plansql/>
</config>
48 — 24.02.16 — 19:30
для настройки и просмотра пользуюсь http://devtool1c.ucoz.ru/
49 — 24.02.16 — 22:14
(47) Вот в таком виде выдает пустые файлы.
<config xmlns=»http://v8.1c.ru/v8/tech-log>;
<dump create=»false» type=»0″ prntscrn=»false»/>
<log history=»24″ location=»C:1CLOGS»>
<property name=»all»/>
<event>
<eq property=»name» value=»SDBL»/>
<gt property=»duration» value=»1000″/>
</event>
<event>
<eq property=»name» value=»DBMSSQL»/>
<gt property=»duration» value=»1000″/>
</event>
</log>
<plansql/>
</config>
Я так понимаю что при наличии тормозов и пустых файлов журнала по таким параметрам означает что SQL работает корректно ?
50 — 25.02.16 — 07:48
(0) ПО лиценщионное? Я про WinSRV SQL
51 — 25.02.16 — 07:49
Антивир в реальном времени, поиск рутктов?
52 — 25.02.16 — 07:57
Стоп-стоп-стоп.То есть у тебя на одном сервере MS SQL и сервер 1С и терминальный сервер?
53 — 25.02.16 — 10:56
(50) стоит с легальным ключем.
(51) антивирус не ставил на сервер, есть рекомендации — Касперский ?
(52) Да, на текущий момент именно так.А так же еще программа WTWare, которая выдает по DHCP IP тонким клиентам и они по сети загружают в ОЗУ программу, которая подключается по RDP.
Всего пользователей порядка 30.
54 — 25.02.16 — 12:04
Создают документ РТУ. Фриз.
Открывают подбор, начинают бегать по справочнику номенклатура — все отлично, моментально добавляется и тд.
Стоит или закрыть документ или начать его проводить. Фриз.
Пробовал пересоздание и перерегистрацию базы. Реиндаксацию средствами и 1С и средствами SQL — результат тот же.
Как говорится и фары протер и по колесу постучал, а машина не едет.
55 — 25.02.16 — 14:44
(54) Нужно поставить туда еще контроллер домена и АТС. Тогда все полетит.
56 — 25.02.16 — 14:49
(55) спасибо за совет, обдумаю.
57 — 25.02.16 — 14:52
(49) при таких настройках в базе либо не должно быть фризов либо настройка лежит не в том месте (не на сервере)
58 — 25.02.16 — 15:14
То есть 64 гб оперативки — из них 40 сиквелу, а все оставшиеся 24 серверу 1С и 27 пользователям? И оперативки хватает? Как так?
59 — 25.02.16 — 15:47
(57) эм, никогда ранее не работал с этим механизмом. Поправьте если заблуждаюсь.
Я должен файл настроек тех журнала положить C:Program Files1cv8conf ? т.е. в папку conf сервера, не в папку conf платформы ?
(58) ну вот сейчас в мониторе вижу :
Доступно 65430, Кэшировано 7119, доступно 18314, свободно 11281.
В среднем 1Сv8.exe отжирает 100-200 мб на пользователя.
Тормоза наблюдались даже после ребута (спустя какое-то время), когда SQL не успевал заполнить весь объем отведенный ему ОЗУ.
Проверил средствами контроллера диски — жалоб нет.
На ночь хочу запустить memTest, может планка какая у меня шалить начала, а я тут всем мозг выношу.
Большое спасибо за участие и советы !
60 — 25.02.16 — 15:50
(59) по дефолту в C:Program Files1cv8conflogcfg.xml

61 — 25.02.16 — 15:55
для толстого клиента на сервере терминалов тоже неплохо бы настроить, там по дефолту в C:Program Files (x86)1cv8conflogcfg.xml
62 — 25.02.16 — 16:38
63 — 25.02.16 — 16:56
ну и да — очиститьнастройкипользователя()
64 — 25.02.16 — 17:17
(62) На сервере стоит Windows 2008 R2 Enterprise.
(61) (60)
Сейчас разместил в два каталога файл по образцу из ЖКК.
<log location=»C:log1c» history=»1″>
<event>
<eq property=»name» value=»proc»/>
</event>
<event>
<eq property=»name» value=»scom»/>
</event>
<event>
<eq property=»name» value=»conn»/>
</event>
<event>
<eq property=»name» value=»excp»/>
</event>
<event>
<eq property=»name» value=»dbmssql»/>
</event>
<property name=»sql»>
<event>
<eq property=»name» value=»mssql»/>
<gt property=»duration» value=»10000″/>
</event>
</property>
</log>
Пока тишина, в папке пусто.
(63) Пробовал запускать 1С с /ClearCache , пробовал создавать им новых отдельных пользователей, для того чтоб не было чужого кэша в профилях, пробовал чистить папку с кэшем руками.
65 — 25.02.16 — 18:03
(63) понял что про внутренние настройки, качаю обработку, попробую очистить настройки рядовым сотрудникам.
66 — 25.02.16 — 20:36
(63) почистил настройки одному человеку, все тож самое. пол часа работала и начались фрзиы.
Нужно на ночь ставить тест ОЗУ думаю.
67 — 25.02.16 — 20:57
Это только в одной базе так? В других базах пользователи работают?
68 — 25.02.16 — 21:09
А точно сама 1С подвисает? Может терминальные клиенты в смысле сетка в целом?
69 — 25.02.16 — 23:52
(67) на сервере две базы, торговля и бухгалтерия. В бухгалтерии работают максимум два человека и то временами. На нее жалоб и не поступало, так как интенсивность ее использования низкая. Так же беда в том, что глюк, который я ловлю, проявляется не у всех сразу. Вот работает вечером 15 операторов, 3-4 жалуются, у других все хорошо. Потом у этих хорошо, другие жалуются. Перезаход в RDP спасает временно. Так же могут работать 3-5 человека и будут ловить поочердено фризы или несколько сразу.
На сетку думал, слал пинги разного размера от сервера к терминалу и обратно — все ровно.
Сегодня протестировал через Adptec’овскую RAID утилиту целостность массива с данным — все ровно. Проверил диски — все ровно.
Перед переездом на этот сервер (пол года назад) гонял тест ОЗУ, проблем не было.
(68) Да вот хрен его. Фризит платформу в момент открытия/закрытия любой формы. Создал ты новую РТУ или открываешь ранее созданную — значения не имеет. Так же в момент закрытия. Не важно , проводишь ли ты документ или же закрываешь без сохранения — ловишь фриз.
70 — 26.02.16 — 06:20
71 — 26.02.16 — 10:39
(70) это фейк. проблемы в rdp были, но не на уровне «поставьте 8800GT» и точно не «Оказывается, странно написанная жёлтая фигня не умела корректно работать с четырёхголовыми мутантами — использовала-то все четыре ядрышка, но почему-то только на 15% мощности. Увидев же могучую 8800 с заветной CUDA, 1С набросилась на неё со всем остервенением.»
72 — 26.02.16 — 14:55
(71) это не фейк, походу терминал был неправильный (не RDP) и дикие разрешения экранов клиентов
в результате затык был на «рисовании графики» на 1 терминальном сервере для около 20 машин
логично что воткнув нормальную видеокарту со своей шустрой памятью графика начала на ней рисоваться разгрузив проц (встроенная видяха)
73 — 26.02.16 — 15:02
(69) Если фризы есть как в толстом клиенте на локальных ПК пользователей, так и в терминале, то дело скорее всего в канале между клиентом и сервером приложений, либо между сервером приложений и сервером БД.
Перенеси базу и лог на общий диск (и отключи шаред мемори) и проверь.
И покажи настройку перезапуска РП и памяти в кластере и рабочем сервере.
74 — 03.03.16 — 09:25
(73) вопрос вроде решился координально в эти выходные. Перетряхнул к черту весь сервер, заодно переконфигурировал дисковую систему. На массивах под SQL логи и бд выровнял страйп, это положительно сказалось на производительность согласно теста Гилева,максимальная скорость многопоточной записи заметно выросла. Дальше буду наблюдать.
Параметры кластера.
Допустимый объем памяти — 1572864 KB
Интервал превышения допустимого объема памяти — 600 сек
Настройки сервера.
Количество ИБ на процесс — 8
Количество соединений на процесс — 8
75 — 03.03.16 — 12:04
(74) А однопоточный тест тоже заметно увеличился, или так же? Кстати, сколько?
Виртуальные машины убрал?
76 — 03.03.16 — 12:20
(75) однопоточный незначительно увеличился до 35 до 38.
Рекомендованное количество пользователей выросло с 28 до 90.
Виртуальных машин и не было на сервере.
В момент конфигурирования РАИД массивов установил размер страйпа 64 кб. После установки операционки и установки родной утилиты по управление контроллером увидел, что для одного массива почему-то размер страйпа был выставлен 32 кб, пересоздал его.
Надеюсь это точка в моей истории.
77 — 03.03.16 — 13:56
(76) Извини, невнимательно посмотрел, обычно если тема про тормоза/виснет и т.д., то как правило стоит ВМ(или несколько), от которых отказаться никак нельзя «по принципиальный соображениям».
38 — это хорошо.
78 — 03.03.16 — 16:00
(77) Да ничего страшного. Было вчера несколько жалоб, но не массового характера. Думаю что по причине стандартных настроек, сегодня утром настроил ограничение по памяти и сеансам, как указал выше. Посмотрим.
Спасибо большое всем участниками темы.
79 — 08.03.16 — 21:38
Сегодня пожаловались трое, симптомы те же.
Из общего обнаружил, что все трое получали не программную лицензию, а с сетевого ключа.
Вопрос.
Платофрма, которая получает лицензию через HASP «нюхает» его только в момент запуска или в ходе работы проверяет его доступность ?
Может ли платформа «фризить» в ожидании такого ответа ?
80 — 09.03.16 — 09:27
(79) Периодически проверяет.
Также попробуй совет номер 9 отсюда: http://sinyakov.blogspot.ru/2013/02/hasp.html
81 — 09.03.16 — 11:01
(80) снес антивирус со своей машины (на ней стоит HASP LM), указал на сервере жестко его IP, отключил BROADCAST. Если дело окажется в ключах, это будет хохма.
82 — 09.03.16 — 16:58
У меня при потере ключа вообще в полный даун впадала. Ключ был сетевой аппаратный.
83 — 10.03.16 — 10:56
Подключил анализ технического журнала.
Большинство ругани было на это (409 записей)
47:21.417004-0,EXCP,0,process=rphost,Exception=0874860b-2b41-45e1-bc2b-6e186eb37771,Descr=’srcLicenseBaseImpl.cpp(4433):0874860b-2b41-45e1-bc2b-6e186eb37771: Ошибка программного лицензирования. Error=10004(0x00002714): Операция блокирования прервана вызовом WSACancelBlockingCall. File=srcLicenseBaseImpl.cpp(4374)’
и на это (122 раза)
07:26.801091-0,EXCP,2,process=rphost,p:processName=torg,t:clientID=2584,t:applicationName=1CV8,t:computerName=base-serv2,t:connectID=4610,Exception=dd149677-3d47-4e05-a55f-4e75b13a441f,Descr=’srcRHostImpl.cpp(2737):dd149677-3d47-4e05-a55f-4e75b13a441f: Требуется переустановка соединения’
84 — 14.03.16 — 13:58
Может кому будет интересно.
Дело было в ключах.
85 — 14.03.16 — 14:47
Что с аппаратными ключами сделал?
AleksandrM09
86 — 15.03.16 — 13:37
(85) Да банально перенес на соседний сервер, где не стоял чудесный доктор веб. На терминальном сервере указал куда нужно смотреть в поисках сетевых ключей и все «тормоза» ушли.
Хм… Включил анализ логов. Сразу же получил:
29:26.784014-0,EXCP,4,process=rphost,p:processName=maxa_base_1,t:clientID=2325,t:applicationName=BackgroundJob,t:computerName=V8APP01,Exception=0874860b-2b41-45e1-bc2b-6e186eb37771,Descr='srcLicenseBaseImpl.cpp(4498):
0874860b-2b41-45e1-bc2b-6e186eb37771: Ошибка программного лицензирования. Ошибка привязки программной лицензии к компьютеру: file://C:/ProgramData/1C/licenses/20180821134359.lic
После получения лицензии удалены:
DISK_1: VMware Virtual disk SCSI Disk Device, SCSIDISK&VEN_VMWARE&PROD_VIRTUAL_DISK5&1982005&0&000000, 512, 63, 15665, 255, 3994575, 251658225, 128849011200
DISK_0: VMware Virtual disk SCSI Disk Device, SCSIDISK&VEN_VMWARE&PROD_VIRTUAL_DISK5&1982005&0&000100, 512, 63, 19842, 255, 5059710, 318761730, 163206005760
В текущей конфигурации компьютера имеются:
DISK_1: VMware Virtual disk SCSI Disk Device, SCSIDISK&VEN_VMWARE&PROD_VIRTUAL_DISK5&1982005&0&000000, 512, 63, 17623, 255, 4493865, 283113495, 144954109440
DISK_0: VMware Virtual disk SCSI Disk Device, SCSIDISK&VEN_VMWARE&PROD_VIRTUAL_DISK5&1982005&0&000100, 512, 63, 23497, 255, 5991735, 377479305, 193269404160
File=srcLicenseBaseImpl.cpp(4267)'
При этом 1с работает. Как клиент, так и сервер… Что бы это значило?
Началось все с того, что я познакомился с перловыми скриптами для парса ТЖ которые размещены на kb.1c.ru (например в этой статье https://kb.1c.ru/articleView.jsp?id=113). По началу мне дико понравилось то, что перл разбирал гигабайты логов за считанные минуты, но позитив мой угасал обратно пропорционально с тем, насколько глубже я погружался в «кроличью нору» ….
Изначально я использовал связку grep (cygwin) + perl, команды были что-то из разряда:
grep '' -rh --include '*.log' | perl descr.pl
или
cat */*.log | perl descr.pl
Первый вариант предпочтителен т.к. мы не зависим от количества вложенных директорий.
Вот собственно скрипты которые выложены на kb
Надеюсь я не нарушил никакое авторское право :). Сразу бросается в глаза, что эти скрипты написаны по одному шаблону и во всех трех присутствует одна и та же ошибка (не будем об этом).
Данные скрипты маленькие, емкие, лаконичные если хотите, и весьма быстрые. Однако они не самодостаточные, т.е. они не агрегируют duration, не выводят количество, по сути эти скрипты некий промежуточный этап, потом результат можно дополнительно обрабатывать AWK или SED’ом, что не очень удобно и не всем доступно (с точки зрения доступности скилов).
Решил я написать перловый скрипт который агрегирует произвольные значения (duration, потребление памяти, да что захотите), хитро группирует колстек (выбрасывает из него все нечитаемые символы, цифры и всякие «,:;’ ), но в консоль выводится все красиво. Скрипт был написан, ознакомиться можно в репе, данный скрипт на вход принимает различные параметры (сортировка, группировка, топ). Вроде все ок, но потом я подумал, все же зачем людям ставить к себе cygwin, надо искать файлы перлом, сказано — сделано. Однако, такой скрипт работал на несколько порядков медленнее. Например если скрипт который читает из StdIn выполнялся 10 сек. то скрипт который читал файлы уже тратил около 15 минут. (обрабатываемый объем естественно одинаков)

Видимо это из-за того, что я регулярку натравливал на весь файл
Решил было распараллелить процесс чтение из файлов, но perl нормально не параллелится и это было мое последнее разочарование, после которого я потерял интерес к perl’у.
perl нормально не параллелится
Тут стоит внести ясность, перл конечно умеет работать «параллельно», но в режиме кооперативной многозадачности, для этого в перл есть т.н. корутины (coroutines) или модуль AnyEvent
Схематично это можно представить так:
т.е. управление передается от корутины к корутине, но общее время выполнение будет такое же как если бы код выполнялся линейно.
К тому же, исторически все же перл создан под linux, в linux можно было бы создать отдельные процессы (fork) и радоваться, но в винде не создается отдельный процесс при выполнении fork(). Есть еще AnyEvent::Fork::Pool, но запустить пример из cpan мне так и не удалось. (особо не старался если честно)
В целом мое впечатление о перле — синтаксис удобный, но язык тяжелый для изучения
После этого я переключился на Golang, параллельность у Go это его сильная сторона. В Go есть свои корутины, в Go они называются горутины. Горутины из себя представляют треды которые работают как в кооперативной многозадачности, так и параллелятся по процессам. Как результат был написана консольная утилита (ссылка на репу в конце статьи).
Архитектура утилиты получилась такая такая:
Каждый файл обрабатывает отдельная горутина, каждая такая горутина разбирает файл на такие части:
41:56.637012-1,SCALL,2,process=rphost,p:processName=ZKGU_KBR,OSThread=15448,t:clientID=20,t:applicationName=BackgroundJob,t:computerName=SP-SRV1,t:connectID=293645,SessionID=11,Usr=DefUser,ClientID=17,Interface=12af46e1-4f3e-4446-a753-519e54d55f48,IName=IObjectLocksStor,Method=2,CallID=33656,MName=clearObjectLocks
41:58.602000-0,CONN,1,process=rphost,OSThread=15448,ClientID=20,Txt=Incomming connection closed: long still
41:58.602001-10966996,CONN,0,process=rphost,OSThread=15448,t:clientID=20,t:clientID=20,t:computerName=SP-SRV1,t:applicationName=BackgroundJob,t:connectID=293645,Calls=11
42:01.551000-0,CONN,0,process=rphost,OSThread=5148,Txt='Ping direction statistics: address=[::1]:1541,pingTimeout=5000,pingPeriod=1000,period=10296,packetsSent=10,avgResponseTime=0,maxResponseTime=0,packetsTimedOut=0,packetsLost=1,packetsLostAndFound=1'
42:11.847000-0,CONN,0,process=rphost,OSThread=5148,Txt='Ping direction statistics: address=[::1]:1541,pingTimeout=5000,pingPeriod=1000,period=10296,packetsSent=10,avgResponseTime=0,maxResponseTime=0,packetsTimedOut=0,packetsLost=1,packetsLostAndFound=1'
42:17.588001-0,EXCP,0,process=rphost,OSThread=16304,Exception=0874860b-2b41-45e1-bc2b-6e186eb37771,Descr='srcLicenseBaseImpl.cpp(5203):
0874860b-2b41-45e1-bc2b-6e186eb37771: Ошибка программного лицензирования. Error=10004(0x00002714): Операция блокирования прервана вызовом WSACancelBlockingCall.
File=srcLicenseBaseImpl.cpp(5144)'
42:18.508012-0,EXCP,0,process=rphost,OSThread=10848,Exception=acea3e6e-3687-4792-8319-09c009274c9a,Descr='srcRHostImpl.cpp(5456):
acea3e6e-3687-4792-8319-09c009274c9a: Рабочий процесс не найден'
(раскрасил для наглядности)
Каждая такая часть поступает на обработку пулу воркеров, по дефолту пул состоит из 10 воркеров (воркер — отдельная горутина, которая работает в фоне и ожидает на вход каких-то данных для обработки), размер воркеров может меняться параметром, об этом далее.
Результат работы воркера это определенная структура, каждый воркер накапливает внутри себя map’ы результатов, по окончанию обработки файлов у нас получается 10 (по количеству горутин) map’ов, они в свою очередь объединяются в общую мапу отдельной горутиной.
map — структура данных в Go, в perl аналог — хэш, в 1С — соответствие
В результате на выходе мы получаем некий контекст (программист задает, что будет контекстом) и некие агрегируемые поля (агрегация всегда осуществляется по полю value, а вот откуда будет браться значения для value определяется программистом)
Вывод результата получается такой:
Для события EXCP
(rphost) EXCP, количество - 7 'srcVResourceInfoBaseImpl.cpp(1113): 580392e6-ba49-4280-ac67-fcd6f2180121: Ошибка работы сеанса Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm: 60c686dc-798f-4d17-aadb-a90156a16eb8: Сеанс отсутствует или удален ID=1204924e-c4ad-43e0-a801-78dca981c70d (rphost) EXCP, количество - 7 'Сеанс отсутствует или удален ID=3c12c449-3c3a-48fb-a1c4-f01869814f97 (rphost) EXCP, количество - 2 'Сеанс отсутствует или удален ID=f8467c59-27ca-4ed9-8768-5f48b6f9ce92
для события CALL
(ИмяБазы) CALL, количество - 9, MemoryPeak - 8317991
ОбщийМодуль.Вызов : ОбщийМодуль.ДлительныеОперацииВызовСервера.Модуль.ОперацииВыполнены
(ИмяБазы) CALL, количество - 1, MemoryPeak - 950231
ОбщийМодуль.Вызов : ОбщийМодуль.СтандартныеПодсистемыВызовСервера.Модуль.СкрытьРабочийСтолПриНачалеРаботыСистемы
(ИмяБазы) CALL, количество - 1, MemoryPeak - 726808
ОбщийМодуль.Вызов : ОбщийМодуль.ИнтернетПоддержкаПользователейВызовСервера.Модуль.ПередНачаломРаботыСистемы
(ИмяБазы) CALL, количество - 1, MemoryPeak - 1454045
ОбщийМодуль.Вызов : ОбщийМодуль.МенеджерОборудованияВызовСервера.Модуль.НайтиРабочиеМестаПоИД
(ИмяБазы) CALL, количество - 1, MemoryPeak - 1210482
Форма.Вызов : Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОбновленияИБ.Модуль.ЗагрузитьОбновитьПараметрыРаботыПрограммыВФоне
в данном случай value выбрано MemoryPeak, можно выбрать duration, как напишите регулярку.
Шаблон для вывода может переопределять программист.
Параметры которые принимает утилита:
- -SortByCount — признак того, что нужно сортировать результат по количеству
- -SortByValue — признак того, что нужно сортировать по значению
- -io — признак того, что данные будут поступать из потока stdin
- -Top — ограничение по количеству выводимого результата
- -Go — количество горутин в пуле (по умолчанию 10)
- -RootDir — директория где будет осуществляться поиск
И для профилирования:
- -cpuprof
- -memprof
Пример использования:
ParsLogs.exe -RootDir=C:Logs
В данном случае поиск логов будет производиться по каталогу «C:Logs»
Также можно применять в тандеме с grep’ом
grep » -rh —include ‘*.log’ | ParsLogs.exe -io
Пример сочетания параметров
ParsLogs.exe -RootDir=C:Logs -Top=10 -SortByCount
Будет выведено 10 результатов отсортированных по количеству
Немного сравнения с перлом:
Для примера был взят мой перловый скрипт с агрегацией и объем логов ТЖ 2.8г
grep » -rh —include ‘*.log’ | perl CallDurationsMem.pl скрипт выполнялся ~ 10 минут
grep » -rh —include ‘*.log’ | ParsLogs.exe -io примерно 3 минуты зависит от того сколько внутри регулярок применяется к блоку данных
ParsLogs.exe -RootDir=C:Logs примерно 2 минуты
Пробовал парсить 30Гб логов, ушло около 2ч.
Кто-то скажет, так перловый скрипт видимо написан не оптимально, я соглашусь, я в перле новичок, так же как и в Go, т.е. считаем, что оба эти приложения написаны не особо оптимально (кстати в Go написать менее оптимально вероятности куда больше, т.к. там нужно не забывать тот факт, что структуры и большинство типов передаются по значению)
Профилирование приложения показало, что основную нагрузку на приложение дает регулярка:

По этому скорость обработки логов напрямую зависит от того насколько оптимальна написана регулярка и сколько этих регулярок под капотом. Регулярок может быть несколько т.к. в приложении был применен pattern chain of responsibility, об это будет рассказано далее.
Если вы захотите присоединиться к разработке, ниже информация для вас:
Как уже писалось выше, в архитектуре решения был применен pattern chain of responsibility (кому интересно вот статья как накостылить этот паттерн на 1С). Основная структура в коде это Chain и интерфейс IChain который чаще всего будет претерпевать изменения. Структура Chain это есть один из звеньев в цепочки ответственности

Цепочка строится в методе BuildChain() (метод в пакете Tools)
func BuildChain() *Chain {
Element1 := Chain{
regexp: regexp.MustCompile(`(?si)[,]CALL(?:.*?)p:processName=(?P<DB>[#k8SjZc9Dxk,]+)(?:.+?)Module=(?P<Module>[#k8SjZc9Dxk,]+)(?:.+?)Method=(?P<Method>[#k8SjZc9Dxk,]+)(?:.+?)MemoryPeak=(?P<Value>[d]+)`),
AgregateFileld: []string{"event", "DB", "Module", "Method"},
OutPattern: "(%DB%) CALL, количество - %count%, MemoryPeak - %Value%
%Module%.%Method%",
}
Element2 := Chain{
regexp: regexp.MustCompile(`(?si)[,]CALL(?:.*?)p:processName=(?P<DB>[#k8SjZc9Dxk,]+)(?:.+?)Context=(?P<Context>[#k8SjZc9Dxk,]+)(?:.+?)MemoryPeak=(?P<Value>[d]+)`),
NextElement: &Element1,
AgregateFileld: []string{"DB", "Context"},
OutPattern: "(%DB%) CALL, количество - %count%, MemoryPeak - %Value%
%Context%",
}
Element3 := Chain{
regexp: regexp.MustCompile(`(?si)[,]EXCP,(?:.*?)process=(?P<Process>[#k8SjZc9Dxk,]+)(?:.*?)Descr=(?P<Context>[#k8SjZc9Dxk,]+)`),
NextElement: &Element2,
AgregateFileld: []string{"Process", "Context"},
OutPattern: "(%Process%) EXCP, количество - %count%
%Context%",
}
return &Element3
}
Метод должен возвращать всегда ссылку на последнее звено в цепочке. Используется это так, выполняется метод «звена» Execute, если он вернул nil и есть следующий элемент в цепочке,тогда вызывается Execute следующего элемента. В Execute выполняется регулярка + кой какие пляски, чтобы можно было удобно работать с именованными группами захвата.
- regexp — шаблон регулярного выражения. Группы захвата обязательно должны быть именованными, в Go это делается так (?P<Имя> …..)
- NextElement — ссылка на предыдущее звено цепочки
- AgregateFileld — имена групп захвата по которым будет производиться агрегация
- OutPattern — шаблон по которому будет выводиться результат. В примере выше маркер %count% нигде не задается, это количество подходящих элементов в группе (при агрегации), давайте считать этот маркер «системным». Группа захвата содержащие значение которое будет суммироваться должна называться Value (имя групп регистрозависимое). Например, если мы захотим агрегировать значения duration, тогда регулярка будет такой `(?si)[d]+:[d]+.[d]+[-](?P<Value>[d]+)[,]CALL(?:.*?)p:processName=(?P<DB>[#k8SjZc9Dxk,]+)(?:.+?)……..`
Проект располагается на github, буду рад, если кто-то присоединится к проекту.
Не загрузить большую базу

Помогите, пожалуйста, разобраться с проблемой.
Есть виндовый сервер с PostrgeSQL 9.4.2 и 1C (64 bit) 8.3.12.1567. При загрузке из dt достаточно большой (dt 2.7 Гб) базы Бух2 вылетает с ошибкой «соединение разорвано администратором». Иногда бывают другие, но такие же бестолковые сообщения об ошибке.
Памяти на сервере 32 Гб. Раньше помогало перезагрузить сервер и сразу запустить загрузку. Иногда это срабатывало. Сейчас видимо база подросла, теперь такой номер не проходит.
База не битая. Пробовал на двух других серверах (Postrge и MS SQL), база загружается. Копировал настройки Postrge — не помогает.
На данный момент нет чёткого понимания, а кто падает СУБД или 1С? Настроил лог СУБД. Там такая картина.
Accounting3 2018-08-01 22:32:32 MSK NOTICE: table «ibversion» does not exist, skipping
Accounting3 2018-08-01 22:32:32 MSK STATEMENT: drop table if exists IBVersion cascade;create table IBVersion (IBVersion int not null, PlatformVersionReq int not null)
Accounting3 2018-08-01 22:33:24 MSK NOTICE: table «v8users» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop table if exists v8users cascade;create table v8users (ID bytea not null primary key, Name mvarchar(64) not null, Descr mvarchar(128) not null, OSName mvarchar(128), Changed timestamp not null, RolesID numeric(10, 0) not null, Show boolean not null, Data bytea not null, EAuth boolean, AdmRole boolean, UsSprH numeric(10, 0) ) without oids
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byname» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byname
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «bydescr» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists bydescr
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byosname» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byosname
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byrolesid» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byrolesid
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byshow» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byshow
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byeauth» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byeauth
Accounting3 2018-08-01 22:33:24 MSK NOTICE: table «v8users» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop table if exists v8users cascade;create table v8users (ID bytea not null primary key, Name mvarchar(64) not null, Descr mvarchar(128) not null, OSName mvarchar(128), Changed timestamp not null, RolesID numeric(10, 0) not null, Show boolean not null, Data bytea not null, EAuth boolean, AdmRole boolean, UsSprH numeric(10, 0) ) without oids
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byname» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byname
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «bydescr» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists bydescr
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byosname» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byosname
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byrolesid» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byrolesid
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byshow» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byshow
Accounting3 2018-08-01 22:33:24 MSK NOTICE: index «byeauth» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop index if exists byeauth
Accounting3 2018-08-01 22:33:24 MSK NOTICE: table «dbschema» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop table if exists DBSchema cascade;create table DBSchema (SerializedData bytea not null)
Accounting3 2018-08-01 22:33:24 MSK NOTICE: table «schemastorage» does not exist, skipping
Accounting3 2018-08-01 22:33:24 MSK STATEMENT: drop table if exists SchemaStorage cascade;create table SchemaStorage (SchemaID int4 not null primary key, Status int4 not null, CurrentSchema bytea not null, NewGenCreated bytea not null, NewGenDropped bytea not null ) without oids
Accounting3 2018-08-01 22:33:25 MSK NOTICE: table «_configchngr» does not exist, skipping
Accounting3 2018-08-01 22:33:25 MSK STATEMENT: drop table if exists _ConfigChngR cascade;create table _ConfigChngR (_NodeTRef bytea not null, _NodeRRef bytea not null, _MessageNo numeric(10, 0), _MDObjID bytea not null, _IDRRef bytea not null primary key ) without oids
Accounting3 2018-08-01 22:33:25 MSK NOTICE: table «_configchngr_extprops» does not exist, skipping
Accounting3 2018-08-01 22:33:25 MSK STATEMENT: drop table if exists _ConfigChngR_ExtProps cascade;create table _ConfigChngR_ExtProps (_ConfigChngR_IDRRef bytea not null, _KeyField bytea not null, _FileName mvarchar(128) not null ) without oids
Accounting3 2018-08-01 22:33:25 MSK NOTICE: table «_accrgopt9961» does not exist, skipping
Accounting3 2018-08-01 22:33:25 MSK STATEMENT: drop table if exists _AccRgOpt9961 cascade;create table _AccRgOpt9961 (_RegID bytea not null, _Period timestamp not null, _ActualPeriod boolean not null, _Periodicity numeric(2, 0) not null, _RepetitionFactor numeric(2, 0) not null, _UseTotals numeric(1, 0) not null, _MinPeriod timestamp not null, _UseSplitter boolean not null ) without oids
и далее аналогично много таблиц. Смущает вот этот момент.
Accounting3 2018-08-01 22:33:50 MSK NOTICE: table «_enum412» does not exist, skipping
Accounting3 2018-08-01 22:33:50 MSK STATEMENT: drop table if exists _Enum412 cascade;create table _Enum412 (_IDRRef bytea not null primary key, _EnumOrder numeric(10, 0) not null ) without oids
Accounting3 2018-08-01 22:39:59 MSK LOG: could not receive data from client: No connection could be made because the target machine actively refused it.
Accounting3 2018-08-01 22:39:59 MSK STATEMENT: COPY _DocumentJournal6059 FROM STDIN BINARY
Accounting3 2018-08-01 22:39:59 MSK LOG: incomplete message from client
Accounting3 2018-08-01 22:39:59 MSK STATEMENT: COPY _DocumentJournal6059 FROM STDIN BINARY
Accounting3 2018-08-01 22:39:59 MSK ERROR: unexpected EOF on client connection with an open transaction
Accounting3 2018-08-01 22:39:59 MSK STATEMENT: COPY _DocumentJournal6059 FROM STDIN BINARY
Accounting3 2018-08-01 22:39:59 MSK LOG: could not send data to client: No connection could be made because the target machine actively refused it.
Accounting3 2018-08-01 22:39:59 MSK STATEMENT: COPY _DocumentJournal6059 FROM STDIN BINARY
Accounting3 2018-08-01 22:39:59 MSK FATAL: terminating connection because protocol sync was lost
Т.е. после таблицы _enum412 висит 9 минут и «could not receive data from client» и далее ошибки такого же рода «incomplete message from client», «unexpected EOF on client connection with an open transaction» и заканчивается «FATAL: terminating connection because protocol sync was lost».
Следующая попытка аналогично.
table «_enum412» does not exist, skipping
drop table if exists _Enum412 cascade;create table _Enum412
пауза 8 мин и «could not receive data from client» но уже с другой таблицей:
Accounting3 2018-08-01 23:06:20 MSK STATEMENT: COPY _InfoRg9249 FROM STDIN BINARY
Accounting3 2018-08-01 23:06:20 MSK LOG: incomplete message from client
Accounting3 2018-08-01 23:06:20 MSK STATEMENT: COPY _InfoRg9249 FROM STDIN BINARY
Accounting3 2018-08-01 23:06:20 MSK ERROR: unexpected EOF on client connection with an open transaction
Accounting3 2018-08-01 23:06:20 MSK STATEMENT: COPY _InfoRg9249 FROM STDIN BINARY
Accounting3 2018-08-01 23:06:20 MSK LOG: could not send data to client: No connection could be made because the target machine actively refused it.
Accounting3 2018-08-01 23:06:20 MSK STATEMENT: COPY _InfoRg9249 FROM STDIN BINARY
Accounting3 2018-08-01 23:06:20 MSK FATAL: terminating connection because protocol sync was lost
Можно ли из этого сделать вывод, что падает сервер 1С?
Источник
Ошибка программного лицензирования error 10004 0x00002714
доброго всем дня.
такая проблема:
стоит Кубунту 9.04, wine 1.0.1, 1С:Предприятие 8.1 и в некоторых отчетах вылетает ошибка:
descr = Ошибка сетевого доступа к серверу
(Windows Sockets — 10004(0x00002714).@) line=870 file=.srcDataExchangeServerImpl.cpp
после чего предлагает либо выйти из программы, либо ее перезапустить.
В инете нашел много статей по этому поводу, но решения так нигде и нет. Эта ошибка связана с графическим интерфейсом (http://www.bookmark-master.com/socket-error-10004.html), может кто сталкивался с этим? как решали?
Keper
а как ты без wine-а 1с запустишь, тока через терминал, вот пока эту проблему не устраню, так и делаю, через терминал их подрубаю, но хотелось бы чтобы без терминала они работали.
как играет? например.
PanterA я не об ос, не о вайне, я об 1С говорю!
У её платформы тоже версии разные бывают.
если про версию 1с, то у нас 8.1.13.45 вроде, в последнем числе могу ошибиццу, ща точно сказать не могу
wine 1.0.1 староват. Есть 1.1.26 по крайней мере.
И платформу поновее ставить надо, тоже помочь может.
А ты вобще пробовал запускать 1С под вайном? Под нативным вайном тебе практически всегда будет гарантирована гора глюков независимо от версии. И платформы.:)
Для 1С есть специально запиленный этерсофтовский вайн. Там тоже глюков достаточно, но их масштаб не сравнить с нативным вайном. Кроме того этеровский вайн постоянно совершенствуется, как буддистский монах.:) Он конечно стоит денег, но эмулятор локальной и облегчённой сетевой версий не так уж и дороги.
Источник
УТ 10.3 . Периодические тормоза.

Имеется вот такой зверь.
Windows Server 2008R2
ОЗУ : 64 Гб.
Xeon E5. 2.4 Ггц x 6.
Дисковая система.
MS SQL 2012.
Под него выделено 40 Гб ОЗУ.
Протокол связи с сервером 1C — Shared Memory.
Раздел C:
2 SATA диска. RAID 1. 1TB
Временное хранение бекапов, исполняемые файлы.
Раздел E:
2 SSD Intel . RAID 1. 120 Гб
Логи SQL баз + tempdb.
Раздел F:
4 SAS. RAID 10. 600 Гб.
Хранятся файлы БД.
На сервере установлен сервер 1С+SQL+Терминалы+WTWare.
Большая часть клиентов грузяться с тонких клиентов по RDP.
Подключаются под одной учетной записью и каждый дальше уже в самой 1С проходит аутентификацию.
Работает порядка 20-25 человек.
Основная работа ведется УТ 10.3. Объем базы 26 Гб.
Так же имеется БП 3.0 . В ней работают 2 человека. Объем базы 30 Гб.
Суть проблемы : время от времени начинают подвисать платформа при работе с формами. Например при открытии/закрытии РТУ и тд.Может занимать 3-6 секунд. Пробовал чистить кэш пользователя, переставил платформу/сервер до версии 8.3.6.2449 — безрезультатно.
Свободной оперативной памяти достаточно, процессор не загружен.
Дисковой активности не заметил.
Вот и возникло несколько вопросов.
С чем могут быть связаны такие вот тормоза ? В момент их появления ничего на сервере не менялось и не устанавливалось.
Источник
Ошибка программного лицензирования. Как исправить?
Средний 4 комментария
Для запуска 1С в клиент-серверном режиме нужно ДВЕ лицензии: одна серверная для запуска сервера 1С:Предприятия, вторая клиентская для запуска клиентского приложения (а для запуска файловой базы нужна только клиентская лицензия, а серверную устанавливать не нужно вовсе) .
Сегодня устанавливал 1С Предприятие на сервер, восстановил лицензию при помощи резервного пинкода, получил в диалоговом окне сообщение что лицензия успешно установлена.
Судя по данному тексту вы получили лицензию на СЕРВЕР.
Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!
Данный текст говорит о том, что 1С не видит лицензию на запуск КЛИЕНТА.
Файл программной лицензии не предусматривает возможность запуска клиентских приложений 1С:Предприятия или внешних соединений:
file://C:/ProgramData/1C/licenses/ХХХХХХХХ.lic
100% что это файл той самой лицензии на сервер 1С, который вы только что получили.
Уточнить можно открыв файл лицензии текстовым редактором, например, блокнотом — в конце файла будет информация о лицензии в человекочитаемом виде.

Т.е для работы вам теперь ещё надо получить клиентскую лицензию.
Для полного понимания советую почитать инструкцию по повторному получению лицензии 1С с разборами ошибок и примерами (кстати, ваш случай там тоже есть)
Как восстановить программную лицензию 1С:Предприятие 8
P. S.
Кстати имя файла затерли совершенно зря — оно представляет собой дату и время получения лицензии, никакой уникальной идентифицирующей информации в имени файла нет, например, активированная сегодня лицензия будет вида 202110131012345.lic, где первые 8 цифр — это дата 2021.10.13, а следующие 6 цифр — это время ЧЧ.ММ.СС.
Источник
Go. Разбор лога технологического журнала. Достойная альтернатива perl’у

Изначально я использовал связку grep (cygwin) + perl, команды были что-то из разряда:
Первый вариант предпочтителен т.к. мы не зависим от количества вложенных директорий.
Вот собственно скрипты которые выложены на kb
Надеюсь я не нарушил никакое авторское право :). Сразу бросается в глаза, что эти скрипты написаны по одному шаблону и во всех трех присутствует одна и та же ошибка (не будем об этом).
Данные скрипты маленькие, емкие, лаконичные если хотите, и весьма быстрые. Однако они не самодостаточные, т.е. они не агрегируют duration, не выводят количество, по сути эти скрипты некий промежуточный этап, потом результат можно дополнительно обрабатывать AWK или SED’ом, что не очень удобно и не всем доступно (с точки зрения доступности скилов).
Решил я написать перловый скрипт который агрегирует произвольные значения (duration, потребление памяти, да что захотите), хитро группирует колстек (выбрасывает из него все нечитаемые символы, цифры и всякие «,:;’ ), но в консоль выводится все красиво. Скрипт был написан, ознакомиться можно в репе, данный скрипт на вход принимает различные параметры (сортировка, группировка, топ). Вроде все ок, но потом я подумал, все же зачем людям ставить к себе cygwin, надо искать файлы перлом, сказано — сделано. Однако, такой скрипт работал на несколько порядков медленнее. Например если скрипт который читает из StdIn выполнялся 10 сек. то скрипт который читал файлы уже тратил около 15 минут. (обрабатываемый объем естественно одинаков)

Видимо это из-за того, что я регулярку натравливал на весь файл
Решил было распараллелить процесс чтение из файлов, но perl нормально не параллелится и это было мое последнее разочарование, после которого я потерял интерес к perl’у.
perl нормально не параллелится
Тут стоит внести ясность, перл конечно умеет работать «параллельно», но в режиме кооперативной многозадачности, для этого в перл есть т.н. корутины (coroutines) или модуль AnyEvent
Схематично это можно представить так:
т.е. управление передается от корутины к корутине, но общее время выполнение будет такое же как если бы код выполнялся линейно.
К тому же, исторически все же перл создан под linux, в linux можно было бы создать отдельные процессы (fork) и радоваться, но в винде не создается отдельный процесс при выполнении fork(). Есть еще AnyEvent::Fork::Pool, но запустить пример из cpan мне так и не удалось. (особо не старался если честно)
В целом мое впечатление о перле — синтаксис удобный, но язык тяжелый для изучения
После этого я переключился на Golang, параллельность у Go это его сильная сторона. В Go есть свои корутины, в Go они называются горутины. Горутины из себя представляют треды которые работают как в кооперативной многозадачности, так и параллелятся по процессам. Как результат был написана консольная утилита (ссылка на репу в конце статьи).
Архитектура утилиты получилась такая такая:
Каждый файл обрабатывает отдельная горутина, каждая такая горутина разбирает файл на такие части:
(раскрасил для наглядности)
Каждая такая часть поступает на обработку пулу воркеров, по дефолту пул состоит из 10 воркеров (воркер — отдельная горутина, которая работает в фоне и ожидает на вход каких-то данных для обработки), размер воркеров может меняться параметром, об этом далее.
Результат работы воркера это определенная структура, каждый воркер накапливает внутри себя map’ы результатов, по окончанию обработки файлов у нас получается 10 (по количеству горутин) map’ов, они в свою очередь объединяются в общую мапу отдельной горутиной.
map — структура данных в Go, в perl аналог — хэш, в 1С — соответствие
В результате на выходе мы получаем некий контекст (программист задает, что будет контекстом) и некие агрегируемые поля (агрегация всегда осуществляется по полю value, а вот откуда будет браться значения для value определяется программистом)
Вывод результата получается такой:
Для события EXCP
для события CALL
в данном случай value выбрано MemoryPeak, можно выбрать duration, как напишите регулярку.
Шаблон для вывода может переопределять программист.
Параметры которые принимает утилита:
- -SortByCount — признак того, что нужно сортировать результат по количеству
- -SortByValue — признак того, что нужно сортировать по значению
- -io — признак того, что данные будут поступать из потока stdin
- -Top — ограничение по количеству выводимого результата
- -Go — количество горутин в пуле (по умолчанию 10)
- -RootDir — директория где будет осуществляться поиск
И для профилирования:
Пример использования:
В данном случае поиск логов будет производиться по каталогу «C:Logs»
Также можно применять в тандеме с grep’ом
grep » -rh —include ‘*.log’ | ParsLogs.exe -io
Пример сочетания параметров
ParsLogs.exe -RootDir=C:Logs -Top=10 -SortByCount
Будет выведено 10 результатов отсортированных по количеству
Немного сравнения с перлом:
Для примера был взят мой перловый скрипт с агрегацией и объем логов ТЖ 2.8г
grep » -rh —include ‘*.log’ | perl CallDurationsMem.pl скрипт выполнялся
grep » -rh —include ‘*.log’ | ParsLogs.exe -io примерно 3 минуты зависит от того сколько внутри регулярок применяется к блоку данных
ParsLogs.exe -RootDir=C:Logs примерно 2 минуты
Пробовал парсить 30Гб логов, ушло около 2ч.
Кто-то скажет, так перловый скрипт видимо написан не оптимально, я соглашусь, я в перле новичок, так же как и в Go, т.е. считаем, что оба эти приложения написаны не особо оптимально (кстати в Go написать менее оптимально вероятности куда больше, т.к. там нужно не забывать тот факт, что структуры и большинство типов передаются по значению)
Профилирование приложения показало, что основную нагрузку на приложение дает регулярка:

По этому скорость обработки логов напрямую зависит от того насколько оптимальна написана регулярка и сколько этих регулярок под капотом. Регулярок может быть несколько т.к. в приложении был применен pattern chain of responsibility, об это будет рассказано далее.
Если вы захотите присоединиться к разработке, ниже информация для вас:
Как уже писалось выше, в архитектуре решения был применен pattern chain of responsibility (кому интересно вот статья как накостылить этот паттерн на 1С). Основная структура в коде это Chain и интерфейс IChain который чаще всего будет претерпевать изменения. Структура Chain это есть один из звеньев в цепочки ответственности

Цепочка строится в методе BuildChain() (метод в пакете Tools)
Метод должен возвращать всегда ссылку на последнее звено в цепочке. Используется это так, выполняется метод «звена» Execute, если он вернул nil и есть следующий элемент в цепочке,тогда вызывается Execute следующего элемента. В Execute выполняется регулярка + кой какие пляски, чтобы можно было удобно работать с именованными группами захвата.
- regexp — шаблон регулярного выражения. Группы захвата обязательно должны быть именованными, в Go это делается так (?P …..)
- NextElement — ссылка на предыдущее звено цепочки
- AgregateFileld — имена групп захвата по которым будет производиться агрегация
- OutPattern — шаблон по которому будет выводиться результат. В примере выше маркер %count% нигде не задается, это количество подходящих элементов в группе (при агрегации), давайте считать этот маркер «системным». Группа захвата содержащие значение которое будет суммироваться должна называться Value (имя групп регистрозависимое). Например, если мы захотим агрегировать значения duration, тогда регулярка будет такой `(?si)[d]+:[d]+.[d]+[-](?P [d]+)[,]CALL(. *?)p:processName=(?P [#k8SjZc9Dxk,]+)(. +?)……..`
Проект располагается на github, буду рад, если кто-то присоединится к проекту.
Источник