Борьба с вредителями - как избавиться от "непредвиденных утечек памяти" сервера 1С

02.10.11

Разработка - Инструментарий разработчика

Обычный рабочий день и вроде бы ничего не предвещало беды, вот только 1С вдруг начинает жутко "тормозить". Оперативно среагировав видите что сервер "съел" всю свободную память и принялся за файл подкачки. За это время либо всё "валится", либо вы сами перезагружаете сервер и остаток дня слушаете жалобы недовольных пользователей. Знакомая ситуация?

Скачать файлы

Наименование Файл Версия Размер
KillUsers.vbs
.vbs 1,11Kb
118
.vbs 1,11Kb 118 Скачать

Собственно небольшой скрипт, который нужно поставить в расписание на сервере/серверах 1С - поменять там нужно имя сервера - на ваше, и количество памяти которое ему допустимо съесть безболезненно - можете ещё выставить время которое у пользователя будет шанс "прекратить" съедать память 1С (метафору вы ведь поняли - речь идёт о пользователях/программистах которые или сами запрос написали "кривой" или сделали настройку таких же свойств). Собственно скрипт рассчитан на 1 сервер и 1 рабочий процесс, и менять на универсальный не буду и вам не советую.

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122113    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7286    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3524    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177737    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99344    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18108    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28107    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

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

2400 руб.

24.09.2019    23601    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SergDi 03.10.11 14:24 Сейчас в теме
в данный момент у меня похожая проблема, сервер отъедает всю доступную память, лечу это дело запуском нового процесса и остановкой рабочего, в течении 10 секунд все приходит в норму.
а этот скрипт грохает непосредственно юзверей?
4. comol 5051 03.10.11 15:29 Сейчас в теме
(1) SergDi, да, убивает тех пользователей, которые "рушат" сервер. Если запрос на самом деле серьёзный - балансировка не произойдёт, т.к. пользователь выболняет запрос к БД... такие пользователи не балансируются. В итоге на рабочем процессе вы этих пользователей всё равно убьёте.. только вот можете не успеть... у нас просто SQL "быстрый"... и мы реально не успевали это дело остановить... а скрипт успевает :)
2. cool.vlad4 2 03.10.11 14:34 Сейчас в теме
Опиши будь добр, что за скрипт, - не "net start/stop"?
3. cool.vlad4 2 03.10.11 14:37 Сейчас в теме
+ 2 конечно, же нет, читать разучился...а на чем скрипт написан? на vbs .ps сегодня не мой день...
5. comol 5051 03.10.11 15:38 Сейчас в теме
И хоть бы кто "+" поставил кто встречал такое дело. Сейчас ведь "придут доброжелатели" наставят минусов, и уже не скачаете когда встретитесь :)
6. artbear 1448 03.10.11 15:43 Сейчас в теме
12 Гб - объем виртуальной или реальной памяти?
Скрипт проверялся на 64-битных серверах или 32-битные также проверялись?
ЗЫ у меня есть контора, которая съекономила 10 штук на 64-битном ключе и сидят на 32х :)
9. comol 5051 03.10.11 16:36 Сейчас в теме
(6) artbear, 12 ГБ конечно про виртуальную память. Скрипт работал только на 64 битных системах... я как-то с трудом себе уже представляю 32 битный сервер... Там наверное будет реботать при очень тонкой настройке... ведь 2ГБ это не так много.. они могут быть заняты и при нормальной работе пользователей... а мы будем выкидывать "ни в чём не повинных", только потому что они больше всех старались...
7. SGordon1 03.10.11 15:45 Сейчас в теме
А утечки мозгов только из за пользователей бывают?
8. comol 5051 03.10.11 15:50 Сейчас в теме
(7) SGordon1, Конечно не только... в основном из за программистов... в принципе утечки это нормальный процесс для 1С.. скрипт нужен для борьбы с "резкими" утечками... для борьбы с обычными подойдёт перезапуск процессов по расписанию...
10. andru_dv 07.10.11 12:55 Сейчас в теме
Это точно полезная вещь т.к.
переодически возникают такие "пожыратели" памяти.
Спасибо за разработку!
11. Mitri4 11.10.11 11:42 Сейчас в теме
А как можно вычислить какие запросы вешают сервер?
12. comol 5051 11.10.11 12:02 Сейчас в теме
(11) Mitri4, нуу... это уже не так просто в идеале нужно конечно включать профайлер и проверять. Но вообще Activity Monitor показывает самые ресурсоёмкие запросы. просто если запрос большой, то может быть не полным. А ещё можете не успеть "поймать" запрос - если на SQL сервере памяти много и диски быстрые, сервер 1с может раньше "рухнуть".. если данный скриптик не работает.
13. hrip 214 14.10.11 16:55 Сейчас в теме
По моему проблема утечки памяти на 8.2 неплохо решается и штатными средствами. В свойствах кластера необходимо указать время через какое необходимо перезапускать процессы и ограничение на объем памяти "съеденной" процессом при которой происходит его перезапуск. На 8.1 можно только указать время через которое будут перезапускаться процессы (хотя пока работали на 8.1 таких проблем и не возникало).
При перезапуске процесса соединения не обрываются - они передаются другому процессу.
15. comol 5051 18.10.11 16:24 Сейчас в теме
(13) hrip, Это разные проблемы... проблема постепенной утечки памяти решается перезапуском. А проблема "мгновенной" - только таким образом - нужно успеть "убить" клиента, запустившего не правильный запрос...
14. zhleonid8 18.10.11 09:37 Сейчас в теме
16. nzass 91 25.10.11 19:13 Сейчас в теме
а у меня проще. 2 batника в шедулере
например в 18.00
stop.bat - "C:\Program Files\1cv82\8.2.11.236\bin\ragent.exe" -stop
в 18.01
start.bat - "C:\Program Files\1cv82\8.2.11.236\bin\ragent.exe" -start
18. cool.vlad4 2 25.10.11 21:13 Сейчас в теме
(16) нет, там другое, там скрипт насколько я помню, мониторит память, если он превышает лимит, то рубит процесс.
17. Трактор 1246 25.10.11 21:12 Сейчас в теме
comol пишет:И хоть бы кто "+" поставил кто встречал такое дело. Сейчас ведь "придут доброжелатели" наставят минусов, и уже не скачаете когда встретитесь :)

Плюсы выпрашивать нехорошо. Повышаются шансы быть заминусованным.
19. Трактор 1246 25.10.11 22:38 Сейчас в теме
Незачем огород городить с виндовым планировщиком. Всё делается в рамках 1С. Правда только под виндой. 1Сники почему-то не сочли нужным сделать управление кластером из-под линукса.
Вот перевод код этого скрипта на язык 1С. Не проверял так как лениво.
В 1Се делаешь регламентное задание которые каждую минуту исполняет следующий код:
Процедура УбитьЗлодея()
	
	Соединение = Новый COMОбъект("V82.COMConnector");
	Агент = Соединение.ConnectAgent("tcp://ИмяСервера"); // Имя сервера
	Кластер = Агент.GetClusters()[0]; // 1 кластер в сервере
	Агент.Authenticate(Кластер, "АдминистраторКластера", "ПарольАдминистратора");
	
	РабочийПроцесс = Агент.GetWorkingProcesses(Cluster)[0]; // 1 Рабочий процесс в кластере
	
	Памъять = РабочийПроцесс.MemorySize;
	
	Если Памъять > 12582912 Тогда // Если сожрал больше 12 ГБ - ищем гада
		МассивСессий = Агент.GetSessions(Cluster).Выгрузить();
		Для Каждого Сессия Из МассивСессий Цикл
			ДлительностьВызоваСервераSQL = Сессия.durationCurrentDBMS // Длительность в миллисекундах
			Если ДлительностьВызоваСервераSQL > 300000 Тогда
				Агент.TerminateSession(Кластер, Сессия); // Если больше 5-ти минут выполняет запрос к СУБД - убиваем
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры
Показать

Соответственно любой может переписАть код под несколько кластеров и несколько рабочих процессов.
За публикацию плюс так как она обращает взор 1Сников на малопопулярную тему.
Ещё бы авторов платформы попинать за то что управление кластером не работает под линуксом и за то что фоновые задания не убиваются.
MalyshOk; wowik; rrustam11983; croga; KrivosheevEV; gogi2003; krv2k; janjul; comol; +9 Ответить
20. comol 5051 31.10.11 17:34 Сейчас в теме
(19) Трактор, тоже можно, просто подумалось что виндовым планировщиком будет надежнее... если сервер "умирать" начнет...
21. seandr 17.11.11 09:27 Сейчас в теме
Спасибо за скрипт. Выполняет свои функции, а ранее приходилось вручную проделывать это.
22. sipoju 30.11.11 17:43 Сейчас в теме
У меня частенько вылетал сервер 1С, сжирал всю память, залазил в своп и падал, помогала только перегрузка сервака, добавил оперативки -- всё как рукой сняло!
23. stark.temp 19.01.12 11:52 Сейчас в теме
Большое спасибо за полезную информацию.
Хотелось бы увидеть и другие статьи по данной теме.
24. stark.temp 19.01.12 12:30 Сейчас в теме
полезная инфа, ставлю+
25. genadyichnew 21.01.12 14:27 Сейчас в теме
26. Lgm 13.04.12 15:33 Сейчас в теме
есть еще один вариант...
Process Lasso
27. artichoke 25.06.12 14:49 Сейчас в теме
а если обратная задача - нехватка памяти для выполнения больших запросов в отчетах пользователей - то где настраивается доступный к использованию объем памяти для rphost?
29. comol 5051 25.06.12 17:28 Сейчас в теме
(27) artichoke, Настраивается только установкой x64 сервера 1С (и Win/lin x64) и дополнительных планок памяти на сервере :). rphost ничем не ограничен в своих желаниях :).
30. AlexO 135 25.06.12 17:53 Сейчас в теме
(29)
ну почему же? есть.
Для 32-х разрядных систем Windows - применение технологии AWE с расширением PAE.
И наоборот - не выставление PAE ограничивает любой пользовательский процесс 2 Гб памяти.
32. comol 5051 25.06.12 22:03 Сейчас в теме
(30) AlexO, 3ГБ PAE - не сильно спасёт. а AWE должна поддерживаться приложением по-моему.
28. AlexO 135 25.06.12 14:55 Сейчас в теме
как избавиться от "непредвиденных утечек памяти"

от непредвиденных - никак.
Можно только от предвиденных и предупрежденных.
31. AlexO 135 25.06.12 17:59 Сейчас в теме
(0)
я не понял, что у вас за утечки памяти - а как знаю я, самые что ни на есть утечки в 1с-сервере происходят из-за того, что какой-то пользователь запустил серьезный расчет, память отъел, а сервер по завершении расчета - память не освободил (спасибо программистам 1с).
В результате - и "старая" ненужная уже память не освободилась, и новая под новые процессы занимается.
А ваш скрипт - это управление давно есть: GetMem и FreeMem, следите, выделяете и освобождате память.
А то, что у вас следит за размером - так просто не дадите пользователю сделать важный отчет. Только и всего :)
Трактор; +1 Ответить
33. comol 5051 25.06.12 22:10 Сейчас в теме
(31) AlexO, Нет, это не утечки памяти. Утечки памяти это как правило медленная деградация и с ними можно бороться. Отчет который может занять 3ГБ памяти сервера - это ошибка программиста 1С, и за такие отчеты его надо бить (больно бить).
По поводу GetMem и FreeMem искренне надеюсь что вы имели ввиду функции (вроде даже не C... паскаль какой-то), а не одноименные программы, тогда ваша фраза хотя бы не лишена смысла. Но нам то они как бы ничем не помогут... если только исходный код платформы раздобыть :)))
34. comol 5051 04.07.12 10:07 Сейчас в теме
Для 8.3 уже не актуальна публикация. Как все перейдут сниму. Появились нормальные средства управления памятью.
35. arian89 29.01.13 08:57 Сейчас в теме
мдамс, такая же проблем есть. стоит попробовать
Оставьте свое сообщение