Yoksel: Блог/2009?/11?/16?/КривыеВнешниеКомпонентыИБлокировки1С ...
SourceForge.net Logo

Home Page | Изменения / НовыеКомментарии / Справка / Помочь проекту | Вход:  Пароль:  

Блог

Кривые внешние компоненты и блокировки 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-application-dialog-on-windows-vista. Он заключается в том, что мы создаем совершенно тривиальную внешнюю компоненту, в которой выполняем следующий код:

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


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


Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Комментарии [Скрыть комментарии/форму]
Ужас спец хороший, но тут явно пукнул в лужу.
Начать с того, что проблема блокировки журнала в момент вылета 1С – никак с ВК не связана.
Вылет 1С по ЛЮБОЙ причине в момент проведения – будут блокировать журнал, пока кнопочку не нажмут.
Надеюсь, никто не будет спорить, что поводов для вылета 1С достаточно и безо всяких ВК.

А решение с доктором ватсоном – можно было бы ему поизучить поподробнее.
У нас оно давно применяется, складывая все логи об ошибках в централизованное место, что бывало очень помогало найти НАСТОЯЩУЮ причину падений, вместо суеверного ужаса от любых ВК.
-- 94.241.208.48 (2009-11-20 11:21:08)
С выражениями типа «пукнуть в лужу» просьба идти на ресурсы типа 1cpp.ru и Мизды.

Проблема блокировки журнала в момент вылета 1С – связана с ВК напрямую. Кривая ВК в несколько раз увеличивает вероятность вылета, что приводит к соответствующему увеличению вероятности вылета в момент проведения документа. И не понимать этого и говорить глупости что «проблема блокировки» «никак не связана с ВК» – это демонстрировать явное разжижение мозга.

«А решение с доктором ватсоном – можно было бы ему поизучить поподробнее.»
Может быть.

«очень помогало найти НАСТОЯЩУЮ причину падений, вместо суеверного ужаса от любых ВК.»
Еще одна демонстрация разжижения мозга автора поста. Никакого суеверного ужаса в моей короткой заметке нет. Есть вполне обоснованное недоверие, основанное на большом опыте использования ВК. Каждый одинэсник проходит следующие стадии отношения к ВК:
1) Инстинктивное недоверие к ВК. Кажется, что все нужно делать штатными методами и вообще нет понимания, как в принципе может возникнуть необходимость в каких-либо «левых» компонентах.
2) Постепенное настороженное изучения вопроса – чтение информации ВК и робкие попытки применения.
3) Восторженное отношение к ВК, желание натащить в конфу самых разных ВК и задействовать побольше вкусных возможностей.
4) Стадия ОСОЗНАННОГО недоверия к ВК. Проявляется у опытных пользователей ВК, не раз наступавших на грабли с ВК.

Я неоднократно убеждался, что кривизна рук ВК-писателей для 1С безгранична. Я наблюдал множество кривого кода и видел множество проблем от применения кривых внешних компонент. Поэтому сейчас я нахожусь на стадии 4. Я стараюсь использовать минимальное количество ВК и очень внимательно относиться к выбору.

В случае, рассмотренной в моей заметке есть описанные четкие симптомы, что в качестве кривой ВК выступает 1cpp.dll. Потому что в basic.dll больше из используемых ВК никто не гадит. Более того, насколько глючна бы не была 1С, она крайне редко способна создать ситуацию, когда на 10 утра можно наблюдать около 15 вылетов в журнале событий. Поэтому можно утверждать с уверенностью 99%, что проблема в 1С++.
-- UzhasOfBuch (2009-11-20 11:38:24)
1. Олег, посмотри на обсуждение http://www.1cpp.ru/forum/YaBB.pl?num=1258550147/0
давай там продолжим общение по поводу ошибок 1С и 1С++
2. Хотелось, чтобы ты выложил более детальные данные об ошибке.
Версия 1С, какие еще ВК юзаешь, порядок загрузки ВК, какие подсистемы 1С юзаешь?
artbear (Артур Аюханов)
-- 83.174.226.166 (2009-11-21 09:46:04)
Артур, да ну на фиг. Поставлю им новую версию (у них там чего-то довольно древнее) и там посмотрим. Если заработает без глюков – хорошо, если нет – то и хрен с ним, и без 1С++ проживут. А разбираться я точно не буду. Надоело.

Обсуждение забавное. Спасибо, по... э... поржал :)
-- UzhasOfBuch (2009-11-21 10:19:26)
А вообще, автор тамошней темы просто сделал «вброс говна на вентилятор». Главное-то у меня не какие-то косяки 1С++. Главное – это то, что кривая ВК (в общем – некая «сферическая кривая ВК в вакууме») может приводить к достаточно неожиданным (для меня по крайней мере) проблемам в виде долгих блокировок.
-- UzhasOfBuch (2009-11-21 10:26:31)
А ты почитал тему на 1С++ до конца?
там народ проделал анализ и показал, что данная проблема с блокировками возможна и без ВК :)
-- 83.174.226.166 (2009-11-23 09:50:07)
Блин, долбанная разметка.

А ты мою заметку почитал до конца? Я тут проделал анализ и показал, что блокировки из-за вылетов становятся ПРОБЛЕМОЙ именно в случае наличия кривых ВК. Сама по себе 1С вылетает очень редко. И уж совсем редко это приходится на модуль проведения. Поэтому ПРОБЛЕМУ блокировок 1С из-за вылетов никогда не создает.

По моему, я это уже объясняю второй или даже n-й раз. Почему, собственно, твоя тема ржачная – так это потому, что подавляющее большинство участников даже не удосужилось толком прочитать заметку. Автор темы произвел «вброс», что обвиняется 1С++, и все как дураки (а может и без «как») кинулись защищать 1С++, вместо того, чтобы включить мозг, подумать и понять, что речь идет совсем о другом.
-- UzhasOfBuch (2009-11-23 11:21:04)
Добавить комментарий:

Защита от спама (введите текст, изображенный на картинке):