Имя: Пароль:
1C
1С v8
Почему происходит утечка памяти на рабочих процессах
,
0 Alex_MA
 
03.06.14
08:20
Здравствуйте!

Вопрос к знатокам.

В базе порядка 200 пользователей - работают через тонкого клиента.
База 170Gb

1. Скажите пожалуйста достаточно ли производительности серверов ?
Конфигурация BLADE сервера:

Server Blade
HP    ProLiant BL460c G7
CPU 1    Six-Core Intel Xeon, 2533 MHz
CPU 2    Six-Core Intel Xeon, 2533 MHz
Memory    32768 MB

На данном сервере поднята виртуальная машина:

Виртуальный сервер (VMware ESXi 5.0.0, 623860)
CPU    2-virtual sockets 4-cores per socket
Memory    32768 MB
HDD    150 Gb
ОС    Windows Server 2008 R2 Standard (64-bit)
Ethernet    VMXNET 3     10 Gb

Отдельный сервер MS SQL

SQL Сервер
CPU 1    Intel Xeon E5440 2.83 GHz 4-Core
CPU 2    Intel Xeon E5440 2.83 GHz 4-Core
Memory    64 Gb
HDD    136 Gb
ОС    Windows Server 2008 Enterprise Service Pack 1 (64-bit)
SQL    Microsoft SQL Server Standard Edition (64-bit) (9.00.5000.00)
Ethernet    HP NC373i Multifunction Gigabit Server Adapter
    HP NC373i Multifunction Gigabit Server Adapter

Настройки кластера 1С Предприятия:
http://www.pictureshack.ru/view_53414_cluster.png
Свойства информационной базы:
http://www.pictureshack.ru/view_34246_propdb.png

На сервере закончилась вся память:
Анализ ситуации показал, что один из рабочих процессов «Включен»=Нет/«Активен»=Да.
http://www.pictureshack.ru/view_30745_wp_1.png

На этом рабочем процессе (PID=2616) присутствует следующее соединение:
http://www.pictureshack.ru/view_58026_conn.png

Свойства соединения:







2. Порой возникает следующая ситуация:
1 Alex_MA
 
03.06.14
08:20
(0)Свойства соединения:
http://www.pictureshack.ru/view_56240_propconn.png

Как должен был отработать сервер 1С Предприятия – исходя из настроек по превышению памяти 3000000КB он должен был создать дополнительные рабочие процессы и переводить соединения на новые рабочие процессы.
После того как все соединения с этого рабочего процесса были бы удалены – он должен был его закрыть и высвободить занимаемую оперативную память. Но этого не произошло.
В результате мы в ручную по PID процесса аварийно завершили работу рабочего процесса. В результате стали создаваться рабочие процессы (т.к. кроме рабочего процесса PID=2616 – были еще рабочие процессы с превышением памяти).
Вот созданные новые процессы:

http://www.pictureshack.ru/view_48827_wp_2.png

1.    Почему так происходит ?
2.     Подскажите пожалуйста как нам отслеживать такие ситуации ?
3.    Помогите найти причину такой работы платформы (м.б. на рабочем процессе PID=2616 была «тяжёлая» операция – выполняемая в одной транзакции ???).
2 xXeNoNx
 
03.06.14
08:22
1. Серваков - Вполне достаточно для такого кол-ва юзеров
3 xXeNoNx
 
03.06.14
08:23
какая платформа 1с?
4 Alex_MA
 
03.06.14
08:26
(3)1С:Предприятие 8.2 (8.2.19.83)
5 xXeNoNx
 
03.06.14
08:26
т.к. кластер серваков на 8.3 работает криво, у меня 1 сервак по конфе такой же, тянет 200юзеров тонких и толстых клиентов память забивается дня за 2, сделал настройки, терь должны скидываться
6 Alex_MA
 
03.06.14
08:29
(5)у нас тоже вроде как сделаны настройки, однако, зависают раб. процессы с сеансами - возникает превышение. На новый раб. процесс не переходят.

Интересно почему такое происходит ?
Интересно если что то на раб. процессе на соединении выполняется в транзакции, а транзакция длинная - то это как раз тот случай ? Ведь сервер 1С Предприятия не перебросит с одного процесса на другой если на этом процессе выполняется в одной длинной транзакции ?
7 xXeNoNx
 
03.06.14
08:34
На x32 платформе у меня стояло 2гб, понятно что 4 вроде как для проца в 32х разрядной системе -норм, но все же, правда очень большие отчеты не смогут собирать. Были так же зависшие процессы. Для 2х серваков и для 200 юзеров, минимально 2 хоста, а максимально 3, на каждый сервер, зачем создал 100штук
8 tdm
 
03.06.14
08:34
(6) глубоко копнули - материал курса специалиста по технологическим вопросам))...насколько помню среди одной из основных причин утечки памяти называются перекрестные ссылки) т.е. неоптимальный код
тоже наблюдаю подобное на 8.2.19.хх(не помню), до этого жили на 8.2.17.хх было подобное реже...переодический рестарт помогает, списал на платформу
9 Alex_MA
 
03.06.14
08:42
(8)в принципе понять бы один момент
если не происходит переключения с одного раб. процесса на другой - Это выполняется в транзакции ?

Если так, то будем анализировать след. образом:

Выясним какой процесс не переключается, узнаем что делает тот пользователь который на этом соединении - и анализируем код
10 tdm
 
03.06.14
08:47
(9) ЦУП ставьте)...кроме того как я понял база у вас серьезная и вопросы оптимизации стоят остро)) зашлите кого-нибудь на курсы, они вроде недельные
11 tdm
 
03.06.14
08:48
12 Alex_MA
 
03.06.14
08:55
(11)Я устанавливал
Центр управления производительностью, редакция 2.0 (2.0.11.1) (http://v8.1c.ru/expert/pmc/pmc_overview.htm)
Copyright (С) ЗАО "1C", 2008-2010. Все права защищены
(http://www.1c.ru)

Я от него не в восторге. Какие то ошибки разбора выходят. По взаимоблокировкам вообще пишет что в данной версии не доступно.

Если ДокументЗамер.Показатель = Справочники.Показатель.АнализЗапросов Тогда
                АнализЗапросов.ПроанализироватьЗапросы(Анализ.СоздатьКонтекстАнализа(ДокументЗамер));
            ИначеЕсли ДокументЗамер.Показатель = Справочники.Показатель.АнализОжиданийНаБлокировках Тогда
                КонтекстАнализа = Анализ.СоздатьКонтекстАнализа(ДокументЗамер);
                Если КонтекстАнализа.Замер.ТипБлокировки = Перечисления.ТипБлокировки.Блокировка1СПредприятия Тогда
                    АнализБлокировок1С.ПроанализироватьБлокировки(КонтекстАнализа);
                ИначеЕсли КонтекстАнализа.Замер.ТипБлокировки = Перечисления.ТипБлокировки.БлокировкаСУБД Тогда
                    АнализБлокировокСУБД.ПроанализироватьБлокировки(КонтекстАнализа);
                КонецЕсли;
            ИначеЕсли ДокументЗамер.Показатель = Справочники.Показатель.АнализВзаимоблокировок Тогда
                КонтекстАнализа = Анализ.СоздатьКонтекстАнализа(ДокументЗамер);
                АнализВзаимоблокировок.ПроанализироватьВзаимоблокировки(КонтекстАнализа);
            ИначеЕсли ДокументЗамер.Показатель = Справочники.Показатель.АнализВзаимоблокировок1С Тогда
                КонтекстАнализа = Анализ.СоздатьКонтекстАнализа(ДокументЗамер);
                Замер.ЗаданиеНеВыполнено(ДокументЗамер, "В данной версии не доступно.");
                Результат = Ложь;
                //АнализВзаимоблокировок1С.ПроанализироватьВзаимоблокировки(КонтекстАнализа);
            КонецЕсли;


http://www.pictureshack.ru/view_99403_cup.png

И в конце концов он смотрит тот же технологический журнал.
13 Alex_MA
 
03.06.14
08:55
14 Alex_MA
 
03.06.14
08:56
15 xXeNoNx
 
03.06.14
08:56
Не факт что поможет выявить эту хрень, поможет узкие места в коде, но не зависшие процессы на хостах.
16 xXeNoNx
 
03.06.14
08:59
а зачем тебе взаимоблокировки скуля, там же есть блокировки 1с и 1с и скуля(14)
17 xXeNoNx
 
03.06.14
09:00
(15) А, пардон, старая версия чтоль?
18 Alex_MA
 
03.06.14
09:02
(17)для последней нужен 8.3

В этой версии только это:
http://www.pictureshack.ru/view_34723_cup.png

Взаимоблокировки 1С (TDEADLOCK)
Взаимоблокировки СУБД
Ошибка? Это не ошибка, это системная функция.