Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С (число прочтений - 8495 )
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
18. Ноября 2009 :: 13:15
Печать  
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #1 - 18. Ноября 2009 :: 14:20
Печать  
Специально процитирую.
Верится слабо, т.к.
1) пользователей у 1С++ не так уж мало, народ давно бы подобное заметил.
2) не указана версия 1С++
3) нет тестовой конфы, на которой можно было бы проверить данное поведение.
Я Ужасу доверяю, но все-таки нужно и его проверить Улыбка

Цитата:
Кривые внешние компоненты и блокировки 1С

Не так давно в одной конторе пришлось наблюдать любопытную ситуацию. Иногда в течение дня база оказывалась заблокированной на несколько минут. В моем случае я видел, что в течение 10 минут никто не мог создавать и проводить документы. При этом сервер был загружен процентов на 30. Т.е. очень не похоже на ситуацию, что множество конкурирующих пользователей полностью съедают процессор и не дают процессу, проводящему документ, нормально отработать. При этом конфигурация была переделана, чтобы ожидание на блокировоках не занимало время процессора.


Изучение логов не выявило никаких длительно проводящихся документов. Вернее, документы с достаточно большим временем проведения таки были (например, документы, проводящиеся задним числом), но они никак не могли проводится десять минут. Внимательное изучение логов в процессе проверки нескольких возможных гипотез выявило аномального пользователя. У этого пользователя за день обнаружилось две записи о входе в систему и ни одной записи о выходе. Время последнего его действия после первого входа как приходилось на время начала массовых проблем с проведением. Время его второго входа оказалось лишь на две минуты позже момента, когда проблемы с проведением прекратились. Совершенно логично предположить, что у данного пользователя вылетела программа. И причем в момент проведения документа. При этом пока пользователь не вошел повторно, у всех были проблемы с проведением.


Эти данные практически полностью выявили проблему. Осталось подтвердить все экспериментально. Была создана простейшая пустая конфигурация с одним видом документов. В глобальный модуль добавлена загрузка внешней компоненты, в которую был внесен код, вызывающий падение 1С. В базу данных был произведен вход двумя пользователями одновременно. В сеансе первого пользователя в модуле проведения был вызван код, приведший к падению 1С. При этом отобразился стандартный диалог операционной системы об ошибке в приложении. Так вот, ПОКА ЭТОТ ДИАЛОГ НЕ БЫЛ ЗАКРЫТ, второй пользователь не мог проводить документы. Как только диалог был закрыт, возможность проведения документов появилась. Т.е. наблюдается полная аналогия с модальными диалогами в модуле проведения документа.


Теперь остается только выявить виновника вылетов. Скорее всего, это 1С++, т.к. вылеты наблюдаются с ошибкой в модуле basic.dll. Возможно, более новая версия будет более стабильна. Иначе останется только делать частный билд и выкидывать из нее весь грязный код, связанный с патчами, хаками и хуками.


Вообще, если виновника вылетов найти не удается, всегда есть возможность временного решения проблемы блокировок. Например, можно включить автоматическое создание дампов приложения и отправку отчета в Microsoft. Выдачу диалогов об ошибке можно в таком случае отключить через “gpedit.msc” – «Административные шаблоны» – «Система» – «Отчет об ошибках». Правда, вряд ли Microsoft обрадуют десятки дампов в день о вылетах одного приложения. А уж если все одинэсники на территории бывшего СССР такой режим включат... Microsoft'у придется закрываться, это точно.


Еще есть возможность полностью исключить выдачу каких-либо соощений о крашах. Рецепт найден здесь: http://stackoverflow.com/questions/396369/how-do-i-disable-the-debug-close-appli.... Он заключается в том, что мы создаем совершенно тривиальную внешнюю компоненту, в которой выполняем следующий код:

В этом случае при вылете 1С не происходит вообще ничего. Программа молча закрывается (как при обычном stack overflow) и все блокировки базы отваливаются. Но и, к сожалению, никаких записей в журнал событий тоже не делается. Так что способ этот на любителя. Только если совсем припекло.


Еще вспоминается программа drwatson32, которая была в старых версия Windows и аналогично делала краш-дампы упавшего приложения, но, вроде бы, без отправки в Microsoft. Возможно, стоит покопать в этом направлении... Тогда, может от диалогов получится избавиться и записи в логе будут создаваться.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #2 - 18. Ноября 2009 :: 15:15
Печать  
Цитата:
В глобальный модуль добавлена загрузка внешней компоненты, в которую был внесен код, вызывающий падение 1С.


Вот этот самый код и любопытно глянуть.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #3 - 18. Ноября 2009 :: 15:42
Печать  
Утверждение неправильное
Каждый в этом может убедиться повторив то, что написано ниже.

Есть база 1с sql
Далее меняем в глоб модуле

Код
Выбрать все
Процедура ПриНачалеРаботыСистемы()
//  добавили одну строку
	return;
//  все что ниже выключилось но осталось
//  заодно выключили и 1с++
 



Сохранили конфигурацию запустили 1с.
Проверили ( нажав на вопросик ) что 1с++ не подгружена.
Открыли журнал документов.
1с вообще без транзакции.
далее заходим в qa
делаем kill нашего процесса.
В 1с выскакивает аварийный диалог.
Далее не закрывая этого диалога в другую базу 1с sql войти можем.
В ту базу где есть незакрытый аварийный диалог войти не можем.


  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #4 - 19. Ноября 2009 :: 06:45
Печать  
Дык там вроде не про вход-выход говорится, а о невозможности провести чего либо.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #5 - 19. Ноября 2009 :: 07:08
Печать  
Eprst писал(а) 19. Ноября 2009 :: 06:45:
Дык там вроде не про вход-выход говорится, а о невозможности провести чего либо.

Причем тут провести. Ошибка воспроизводиться и без всякого проведения.
Проведение вообще не при делах когда речь о локальном компьютере. на sql сервере  снятие проведения ( не важно из-за чего) откат транзакции и все.
  
Наверх
 
IP записан
 
leonvlas
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 47
Зарегистрирован: 03. Августа 2007
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #6 - 19. Ноября 2009 :: 07:41
Печать  
Вообще так себя штатно ведет 1с, пока не закроешь окно с сообщением войти в эту базу невозможно, для этого надо коцать тогда и соединения от пользователя где лежит МД
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #7 - 19. Ноября 2009 :: 09:04
Печать  
Z1 писал(а) 19. Ноября 2009 :: 07:08:
Причем тут провести. Ошибка воспроизводиться и без всякого проведения.


Как при чем ? При аварийном завершении в модуле проведения, пока не нажмешь на ОК в аварийном диалоге - табличка журнала так и будет блокирована..
и 1cpp тут не причем - это и без вк так.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #8 - 19. Ноября 2009 :: 16:09
Печать  
Eprst писал(а) 19. Ноября 2009 :: 09:04:
Z1 писал(а) 19. Ноября 2009 :: 07:08:
Причем тут провести. Ошибка воспроизводиться и без всякого проведения.


Как при чем ? При аварийном завершении в модуле проведения, пока не нажмешь на ОК в аварийном диалоге - табличка журнала так и будет блокирована..
и 1cpp тут не причем - это и без вк так.


у меня не получилось воспроизвести. 1сpp выключена
В модуле проведения поставил

Процедура ОбработкаПроведения()
Предупреждение("Пауза !!!");
// Далее без изменений



Зашел в 1с с двух разных компьтеров
В первом компьютере стал проводить документ
Остановился на паузе.
зашел в qa убил sql процесс первого компьютера.
При этом продолжает висеть Предупреждение("Пауза");

Сразу же после этого со второго компьютера вошел в 1с
стал проводить другой документ. Все провелось.
В первый документ не пускает из-за файловой блокировки.
Далее зашел на первый компьютер. Нажал ок.
1с выдала диалог ошибки.
Со второго компьютера другой документ проводиться.
В первый документ не пускает из-за файловой блокировки.
После закрытия окна ошибки и еще одного окна ошибки файловая блокировка исчезла и
со второго компьютера стал проводиться и первый документ.


PS Может быть у УжастьБух был какой-то особенный код
"вызывающий падение 1С." т.е. надо уронить 1с в модуле проведения таким образом
чтобы приложение закрылось, а sql процесс остался.
Тогда наверное и будет возникать subj. Как это сделать я не знаю.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #9 - 20. Ноября 2009 :: 06:49
Печать  
Может быть.. он в дбф тестил Улыбка
Вот такой код , в дбф вызывает ошибку
Ну.. я вот так воспроизвёл:
Код
Выбрать все
Процедура ОбработкаПроведения()
 	  ТЗ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ.НоваяКолонка();
	ТЗ.КоличествоСтрок(-100);
	ТЗ.НоваяСтрока();
КонецПроцедуры 



а в скуле - тихо вылетает и всё..
В дбф - будет висеть окошко и блокировка журнала..
В скуле - нет..
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #10 - 20. Ноября 2009 :: 07:03
Печать  
В ветке http://yoksel.net.ru/Blog/2009/11/16/KrivyeVneshnieKomponentyIBlokirovki1S
к сожелению ничего не сказано о версии 1с ( sql или dbf )

Если рассуждать самому то остается открытой файловая блокировка на  1sjourn.dbf вот она то и не дает проводить документы.

Ну вроде все точки над i  расставлены.
1c++ ни причем. subj актуален только для dbf
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #11 - 20. Ноября 2009 :: 08:27
Печать  
Ужас спец хороший, но тут явно пукнул в лужу.
Начать с того, что проблема блокировки журнала в момент вылета 1С - никак с ВК не связана.
Вылет 1С по ЛЮБОЙ причине в момент проведения - будут блокировать журнал, пока кнопочку не нажмут.
Надеюсь, никто не будет спорить, что поводов для вылета 1С достаточно и безо всяких ВК.

А решение с доктором ватсоном - можно было бы ему поизучить поподробнее.
У нас оно давно применяется, складывая все логи об ошибках в централизованное место, что бывало очень помогало найти НАСТОЯЩУЮ причину падений, вместо суеверного ужаса от любых ВК.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #12 - 20. Ноября 2009 :: 08:33
Печать  
И кстати, давно уже пора для 1С++ сделать что-то типа KBuild'а для ядра линуха - чтобы была возможность легко собрать версию только с нужными фичами. Конечно, это дело сложное, и потребует детального просмотра кода, для выяснения зависимостей.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #13 - 20. Ноября 2009 :: 09:31
Печать  
orefkov писал(а) 20. Ноября 2009 :: 08:33:
И кстати, давно уже пора для 1С++ сделать что-то типа KBuild'а для ядра линуха - чтобы была возможность легко собрать версию только с нужными фичами. Конечно, это дело сложное, и потребует детального просмотра кода, для выяснения зависимостей.

Дело сложное, это факт. Если даже разработчики, даже просто билд, собрать иногда не могут...
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Yoksel:Блог:КривыеВнешниеКомпонентыИБлокировки1С
Ответ #14 - 20. Ноября 2009 :: 11:32
Печать  
orefkov писал(а) 20. Ноября 2009 :: 08:33:
И кстати, давно уже пора для 1С++ сделать что-то типа KBuild'а для ядра линуха - чтобы была возможность легко собрать версию только с нужными фичами. Конечно, это дело сложное, и потребует детального просмотра кода, для выяснения зависимостей.

Саш, а у тебя есть экономическое обоснование этой задачи?
Ну, там, целевая аудитория, оценка трудозатрат, roi на худой конец.

И еще ведь нужен потенциальный исполнитель?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать