|
Почему фоновые задачи так тормозят? | ☑ | ||
---|---|---|---|---|
0
Chai Nic
03.12.13
✎
13:08
|
Пробую перевести файловую БП3 на клиент-сервер. В клиент-сервере, как известно, для выполнения стандартных отчетов и регламентных процедур закрытия месяца _безальтернативно_ используется механизм фоновых заданий. С одной стороны, это плюс - позволяет во время формирования отчета пользователю делать что-то еще, но есть одно НО - огромный оверхед по времени выполнения при использовании этого механизма.
Так, оборотно-сальдовая ведомость, которая формируется за секунду в файловом режиме, в режиме отложенного выполнения заданий формируется порядка 8 секунд. И проблема тут не собственно в клиент-сервере. Попробовал "обмануть" конфигурацию, заставив её подумать, что она работает на файловой версии (добавил в начало функции ОбщегоНазначения.ИнформационнаяБазаФайловая() строчку Возврат Истина;) - в этом случае отчет выполняется на sql-базе так же быстро, как и в файловой. Вопрос. Почему такие задержки при использовании фоновых заданий? |
|||
1
Chai Nic
03.12.13
✎
13:26
|
Попробовал в виде эксперимента подкрутить в конфигурации тайминги опроса фонового задания, в ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания() и в ДлительныеОперации.ЗапуститьВыполнениеВФоне() указал 0.1 секунду без последующего увеличения - резко выросло количество вызовов сервера, однако скорость формирования не изменилась... странно как-то. На что тратится время?
|
|||
2
МихаилМ
03.12.13
✎
13:26
|
что собщает замер производительности ?
|
|||
3
France
03.12.13
✎
13:27
|
(1) время тратится на ожидание выделения процессорного времени ОС..
|
|||
4
Chai Nic
03.12.13
✎
13:29
|
(3) Процессорного времени ОС в избытке и на сервере и на клиенте. Или вы имеете в виду, что 1с запускает для каждого фонового задания отдельный процесс? Неужели так всё плохо?
|
|||
5
Chai Nic
03.12.13
✎
13:33
|
(2) Замер производительности по серверному коду не могу пока сделать - на сервере не включена отладка, а перезапускать его в рабочее время нельзя. А в отладчике, подключенном к клиенту ничего интересного - там доли секунды тратятся...
|
|||
6
banco
03.12.13
✎
13:35
|
(0) сколько процессов на сервере 1С?
|
|||
7
Chai Nic
03.12.13
✎
13:37
|
(6) 8 рабочих процессов (по количеству ядер). Загруженность сервера близка к нулю.
|
|||
8
banco
03.12.13
✎
13:37
|
(7) оставь 1 процесс
|
|||
9
Chai Nic
03.12.13
✎
13:40
|
(8) Сервер 1с 32-битный, один процесс может упереться в нехватку адресного пространства... Но в виде эксперимента попробую вечером. Сомневаюсь, что это как-то повлияет.
|
|||
10
banco
03.12.13
✎
13:42
|
(9) да, плохо что 32-битный, но, помню, у одного клиента помогло
|
|||
11
Живой Ископаемый
03.12.13
✎
13:44
|
а если процесс фоновых заданий вынести в отдельный менеджер?
|
|||
12
Chai Nic
03.12.13
✎
13:47
|
(10) Попробовал всем процессам, кроме одного, поставить "Не использовать", пока не удаляя их - скорость инициализации фоновых задач резко выросла. Теперь 2 секунды вместо 8. Спасибо за подсказку.. не ожидал от 1с такой подлянки.
|
|||
13
kiruha
03.12.13
✎
14:01
|
Поставь разрешить отладку на сервере
И в конфигураторе Отладка Подключение автоматическое подключение фоновые Сделай замер Но вообще не понятно зачем нужно ускорять фоновые ? |
|||
14
kiruha
03.12.13
✎
14:02
|
(12)
Верни назад, не нужно ускорять иниц фоновых |
|||
15
Живой Ископаемый
03.12.13
✎
14:02
|
он же написал зачем, чтобы не ждать оборотку по 8 секунд, а ждать по 2.
|
|||
16
H A D G E H O G s
03.12.13
✎
14:04
|
Ну может 1С решает, какому процессу отдать выполнение фонового.
|
|||
17
kiruha
03.12.13
✎
14:04
|
Ну ну удачи ему в его экспериментах
Про параллельность и приоритеты я так понимаю пофиг |
|||
18
Chai Nic
03.12.13
✎
14:08
|
(17) Если бухгалтер запустил формироваться ОСВ - он будет ждать, пока она сформируется.. ему параллельность нафиг не нужна, ему важнее реактивность интерфейса
|
|||
19
kiruha
03.12.13
✎
14:10
|
(18)
А зачем в фоне делаешь ? |
|||
20
Chai Nic
03.12.13
✎
14:12
|
(19) Мне незачем. Просто 1с выбора не оставляет: любой стандартный отчет БП3 формируется в фоновом режиме, если конфигурация запущена на клиент-сервере. Так задумано в 1с.
|
|||
21
Живой Ископаемый
03.12.13
✎
14:12
|
писатель
|
|||
22
kiruha
03.12.13
✎
14:13
|
(20)
И там одну строку переписать ? |
|||
23
Chai Nic
03.12.13
✎
14:14
|
(22) И это будет уже не типовая, а так да..
|
|||
24
Chai Nic
03.12.13
✎
14:16
|
(16) "Ну может 1С решает, какому процессу отдать выполнение фонового"
Уж слишком она задумчива в этом самом месте. Чтобы выбрать один из 8 - тратит не менее 5 секунд. Она на счетах что ли считает?) |
|||
25
Fragster
модератор
03.12.13
✎
14:17
|
а сколько запускается пустое фоновое задание?
|
|||
26
Fragster
модератор
03.12.13
✎
14:17
|
просто тупо через менеджер фоновых + ожидать завершения на пустую функцию?
|
|||
27
kiruha
03.12.13
✎
14:34
|
Или отчет на СКД самый примитивный типа
Выбрать элемент справочника с отбором по коду |
|||
28
Chai Nic
03.12.13
✎
14:37
|
(25) Попробовал с предопределенным заданием "Обмен сообщениями по учетным записям документооборота", поскольку сообщений никаких нет - на одном РП выполняется моментально (менее секунды), на более чем одном (проверял от 2 до 12) - задержка 8 секунд.
В общем вывод такой - тормоза при использовании нескольких рабочих процессов, причем нет ощутимой зависимости от количества РП больше одного. |
|||
29
Никола_
Питерский 03.12.13
✎
14:40
|
(28) Так уже давно грят что чем меньше процессов тем лучше ?
|
|||
30
Chai Nic
03.12.13
✎
14:45
|
(29) Спорный вопрос. Как один рпхост сможет использовать возможности многопроцессорного сервера?
|
|||
31
Fragster
модератор
03.12.13
✎
14:45
|
(30) может
|
|||
32
kiruha
03.12.13
✎
14:52
|
(28)
Осталось проверить то же самое для 100 юзверей |
|||
33
Chai Nic
03.12.13
✎
14:57
|
(32) В любом случае баг с тормозами запуска ФЗ при нескольких РП остается багом. 8 секунд плюсом на запуск - они не лишние при сколь угодно большом количестве пользователей..
|
|||
34
kiruha
03.12.13
✎
15:07
|
(33)
Вот представь - что кроме того что выполнить задачу нужно породить задание, определить нагрузку подчиненных, расчитать приоритеты, выделить ресурсы, согласовать параллельное получение данных и т.д. и только потом выполнить задачу Что быстрее ? |
|||
35
Chai Nic
03.12.13
✎
15:16
|
(34) Это лишь слова. А на деле - задача сводится к выбору одного наименее нагруженного процесса. Тратить на это несколько реальных секунд на современном сервере по меньшей мере неразумно.
|
|||
36
Chai Nic
03.12.13
✎
15:18
|
Кстати, говорят в 8.3 вообще убрали возможность добавлять рабочие процессы.. видать неспроста
|
|||
37
Живой Ископаемый
03.12.13
✎
15:20
|
неявно - можно. можно сказать что два пользователя на один рабочий процес, или 1 база
|
|||
38
Никола_
Питерский 03.12.13
✎
15:20
|
(30) Ну исходников 1Сного сервера мы не имеем и по этому как они там реализовали работу всей этой кухни понятия не имею !
Но 1С любит экспериментировать, это факт ! |
|||
39
kiruha
03.12.13
✎
15:27
|
(35)
Как написали ниже кухни мы не знаем. Может там идет инициализация которая потом исчезнет. Опять же большое количество данных между процесссами перекидывается не мгновенно |
|||
40
kiruha
03.12.13
✎
15:28
|
Вообщем проведи тест на 100 чел для вывода (33)
|
|||
41
Леха Дум
03.12.13
✎
15:30
|
багоискаители :), там обработчик ожидания опрашивает фоновые задания на предмет выполнение с определенной периодичностью :)
|
|||
42
Fragster
модератор
03.12.13
✎
15:34
|
(41) я у автора спросил за что-то типа
Задание = ФоновыеЗадания.Выполнить("ФоновыеФункции.ФоноваяКалибровка"); Задание.ОжидатьЗавершения(); и обработчик ожидания тут не причем |
|||
43
Жан Пердежон
03.12.13
✎
15:36
|
(41) лишь бы ляпнуть
|
|||
44
Леха Дум
03.12.13
✎
15:45
|
(43) модуль ДлительныеОперации
ВЫЗОВ: в общей форме "ФормаОтчета", процедура Функция ОтчетСкомпоноватьРезультатНаСервере(ВФоновомЗадании) ........... ........... Попытка РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( УникальныйИдентификатор, "ВариантыОтчетов.СформироватьОтчет", ПараметрыФормированияОтчета, НСтр("ru = 'Варианты отчетов: Формирование отчета'") ); РезультатЗапуска.ЗаданиеВыполнено = РезультатФоновогоЗадания.ЗаданиеВыполнено; РезультатЗапуска.ВызваноИсключение = Ложь; ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; Исключение ПРОВЕРКА: ПараметрыЗадания.Добавить(Неопределено); Задание = ФоновыеЗадания.Выполнить("ОбщегоНазначения.ВыполнитьБезопасно", ПараметрыЗадания,, НаименованиеЗадания); Попытка Задание.ОжидатьЗавершения(ВремяОжидания); Исключение // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. КонецПопытки; (43) иногда лучше промолчать |
|||
45
Жан Пердежон
03.12.13
✎
15:58
|
(44) ну скопипасти сюда пару модулей, их ведь ни у кого нет и никто, кроме тебя ни разу не видел. Что сказать-то хотел?
|
|||
46
Chai Nic
03.12.13
✎
16:19
|
(44) Еще в (1) я завышенные тайминги в конфигурации исключил, тем более, что налицо зависимость именно от количества рабочих процессов..
|
|||
47
Леха Дум
03.12.13
✎
16:32
|
(46) время действительно может тратиться на системный опрос всех процессов, где выполняются фоновые задания. Кроме того, похоже системе приходится собирать информацию из данных по уже отработанным фоновым заданиям - тоже время.
(45) всю ветку от корки до корки не прочитаешь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |