22 сентября, суббота 13:39
Bankir.Ru

Объявление

Свернуть
Пока нет объявлений.

Диасофт FA# + Цитрикс

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Диасофт FA# + Цитрикс

    Добрый день.
    Ситуация следующая - до филиалов у нас достаточно слабые каналы, поэтому диасофт туда отдаем через терминальные сессии.(citrix metaframe XP)
    Среднее количество пользователей - 70-80 человек одновременно.

    После перехода на версию FA# с 5NT имею следующую картину - до 35-40 пользователей на сервере цитрикс - все работает. Далее начинаются проблемы (скрины месседжбоксов ниже).
    Проблемы не привязаны к конкретным пользователям и могут возникать у любого пользователя. Те же кто работает в текущий момент - продолжают работать. Главное окно грузится у всех нормально Ошибки у пользователей однотипны, выползают при попытки открыть рабочие окна (Журнал проводок, план счетов, первичные документы)

    Что делал:
    (домен) Проверил права у сломавшихся пользователей; проверял права их групп; проверял доступ к файлу на из под сломавшейся сессии (читается)
    (Цитрикс) Смотрел утечки памяти (нет), смотрел нагрузку - возросла по сравнению с 5НТ, но не критично.
    Вне терминала, в прямом коннекте, проблем нет (тоже приличное количество пользователей одновременно)

    Субъективно приложение в терминале стало работать гораздо медленнее, что впрочем и ожидаемо - памяти жрать оно стало гораздо больше.

    Моя гипотеза насчет проблемы - диас просто не успевает прогрузить себе библиотеки (bpl) за какое то свое прописаное внутри в коде время.
    К сему вопросы - действительно ли это так? Если так, то есть ли где ручки коими можно покрутить оное время? Если не так, куда смотреть?

    Заявка в диас подана, обещают ответить, но проблема стоит сейчас. Пользователи ессно нервничают.
    Последний раз редактировалось SergeyMV; 21.11.2007, 04:59.

  • #2
    Касательно 2-й картинки, ошибка ведь "General SQL Error", то есть как минимум ее можно отследить трассером, профайлером и т.д. И кстати к цитриксу похоже проблема отношения не имеет.

    Комментарий


    • #3
      Да, но повторяется оно только под цитриксом %)
      Клиенты в прямом коннекте работают великолепно.

      Мда.. Не хотелось громоздить средства отладки в сессии, но похоже придется .
      Впрочем не суть, похоже оное смогут подкрутить только господа из диаса..
      А они все еще молчат.

      Комментарий


      • #4
        А памяти хватает? Как вариант при большом к-ве пользователей может не хватать памяти на создание различных буферов. Так компилятор борландовский работает. Может попробовать увеличит размер вирт.памяти на всякий случай.

        Комментарий


        • #5
          Сейчас таскманагер сообщает - Памяти используется 3Гб Всего - 12Гб.
          4 реальной, 8 подкачки.
          Смысла увеличивать не вижу.

          Комментарий


          • #6
            Кстати а цитрикс сгоняет всех пользователей под 1 процесс имеющий платформенное ограничение 2ГБ на процесс? Или на каждую пользовательскую сессию отдельный процесс создает?

            Комментарий


            • #7
              Сам себе отвечаю - КАЖДАЯ задача у КАЖДОГО пользователя под Цитрихом идет отдельным процессом. Прибросим - deal32.exe может занимать памяти в диапазоне 32МБ до 164 Мб ОЗУ. Помножить на 70-80 пользователей одновременно. К этому добавить всякие ворды , екселы и прочую софтину....
              Последний раз редактировалось y1984; 21.11.2007, 10:44.

              Комментарий


              • #8
                Второе)
                На каждое соединение создаются отдельные процессы.
                Я понимаю, вопрос на самом деле дурацкий, но никаких изменений на существующих цитрикс серверах не было. 5нт самых разных версий бегал спокойно. Количество пользователей существенно не менялось
                Все же мне кажется нужно смотреть в сторону deal32.exe :-)

                Только знать бы куда... Диасофт до сих пор молчит.

                Комментарий


                • #9
                  Предлагаю тест: С Утра, когда нагрузка плавно нарастает, провести замеры используемой памяти(допустим каждые 5 мин) в зависимости от кол-ва активных пользователей и сие дело схронометрировать с моментом возникновения проблем...

                  Комментарий


                  • #10
                    И еще. На всякий случай проверь свободное место на диске цитрикса, поскольку БДЕ через которую работает Диасофт создает на каждый запрос локальный(на цитриксе, причем парадоксовский :-) ) файл с результатами запроса в алиасах пользователей, а при таком к-ве одновременных юзеров это может быть приличный обьем.

                    Комментарий


                    • #11
                      Сам себе отвечаю - КАЖДАЯ задача у КАЖДОГО пользователя под Цитрихом идет отдельным процессом. Прибросим - deal32.exe может занимать памяти в диапазоне 32МБ до 164 Мб ОЗУ. Помножить на 70-80 пользователей одновременно. К этому добавить всякие ворды , екселы и прочую софтину....

                      У меня два сервера цитрикса, итого получается 35-40 пользователей на один. В среднем память 60-70 МБ на процесс, если верить таскмгру, посему 3-4Гб расхода памяти вполне нормально:-) Ну и у меня ее не так уж и мало). Впрочем воткну еще 4, поглянем на результат.

                      Про два сначала умолчал, извините, не специально :-) но предваряя следующие вопросы - ситуация на обоих серверах, отслеживал. )) Наличие двух серверов кстать немного ситуацию спасает - невозможность доступа для 10-15 пользователей менее критична чем невозможность для 50-60.
                      Но так же ненормальна.


                      Ворды, ексели и прочие софтины пускаются локально. Цитрикс используется только для разгрузки каналов до допофисов.

                      Утром посмотрю, спасибо за совет.
                      Файлики.. Они как называются?) Поискать их.. еси pdoxusrs.net - то оное хранится на примапленых дисках пользователей.
                      Последний раз редактировалось SergeyMV; 21.11.2007, 11:30.

                      Комментарий


                      • #12
                        pdoxusers.net и pdoxusers.lck - это немного не из той оперы :-)
                        К примеру у пользователя открыты 2 процедуры и один прямой селект. БДЕ создаст 3 таблички, с результатами откэшированных/выкачанных с сервера записей. Путь в каталог локального кеша указывается где-то через BDE Admin, где конкретно - запамятовал - под руками нету. А файлы создаются типа: xxx654654654755456445.dat кажется.

                        Комментарий


                        • #13
                          Сообщение от y1984 Посмотреть сообщение
                          Сам себе отвечаю - КАЖДАЯ задача у КАЖДОГО пользователя под Цитрихом идет отдельным процессом. Прибросим - deal32.exe может занимать памяти в диапазоне 32МБ до 164 Мб ОЗУ. Помножить на 70-80 пользователей одновременно. К этому добавить всякие ворды , екселы и прочую софтину....
                          Терминалка умеет разделять dll (грузить одну dll на несколько сессий) dll, но делает это гораздо хуже с bpl. Поэтому возможна ситуация, когда bpl постоянно выгружается загружается для каждого процесса.
                          В частности поэтому в свое время разработчики отказывались от использования bpl в пользу dll, хотя это усложняет программирование.
                          Попробуйте TScale http://www.rtosoft.com/Products/TScale/TScale.htm. Должно помочь. Для "ворды , екселя и прочую софтина" осторожно предложил бы режим опубликованного приложения на ОТДЕЛЬНОМ терминальном сервере. (Кстати и для deal32 оно тоже работает.) И вообще балансировка нагрузки (два сервера вместо одного) при том же количестве лицензий хорошо.

                          Судя по последнему скриншоту у вас клиент лежит на сетевом ресурсе. Попробуйте положить на локальный (для Citrix_a) ресурс.
                          Последний раз редактировалось IgorL; 21.11.2007, 13:43. Причина: Дополнение

                          Комментарий


                          • #14
                            Терминальный сервер умеет расшаривать откомпилированный экземпляр DLLки, но не умеет расшаривать буфера памяти которые создают DLLки для каждого пользователя. А у Deal32.exe, вкупе с вызываемыми дллками, буфера могут зашкаливать за 100 мег.

                            Комментарий


                            • #15
                              Сообщение от y1984 Посмотреть сообщение
                              Терминальный сервер умеет расшаривать откомпилированный экземпляр DLLки, но не умеет расшаривать буфера памяти которые создают DLLки для каждого пользователя. А у Deal32.exe, вкупе с вызываемыми дллками, буфера могут зашкаливать за 100 мег.
                              Не знаю что такое "буфера" применительно к памяти , особенно к dll. Dll это всего лишь библиотека функций. Без отдельных ухищрений с SharedMem функции из библиотеки выделяют память в виртуальном адресном пространстве вызывающего процесса. Эта память доступна только внутри этого процесса или его потоков.
                              Вопрос и ответ заключается в количестве экземпляров DLL в памяти на терминальном сервере (и не только ) для каждого приложения, а так же какая модель загрузки используется - явная или не явная.
                              Bpl в отличии от dll, экспортирует все функции/методы всех включенных в нее модулей, а не только используемые как dll, что существенно увеличивает размер окна меппинга, даже если удалось убедить Windows не грузить bpl в адресное пространство приложения а отображать файл в память процесса, как это делает dll (FileMapping, MapViewOfFile дают разделяемую память).
                              Bpl у Diasoft_а похоже загружаются/выгружаются явно (посмотрите например в rti, где прописывается, какие bpl сейчас загружены). В этом есть некотрое преимущество при работе на отдельно взятой рабочей станции (память экономится) но при этом серьезный проигрыш по времени вызова (особенно четко это видно когда клиентская часть лежит на сетевом диске с медленным доступом) и сетевому трафику (без отдельных танцев с бубном Windows не кеширует bpl).
                              Все конечно упрощенно и по памяти. Интересующиеся могут почитать например Рихтера, помнится там толково было расписано.
                              Последний раз редактировалось IgorL; 21.11.2007, 16:23. Причина: Очепятка

                              Комментарий


                              • #16
                                Буфера - это термин из 1990-х , когда писАл на простом С под PDP11/03 8-) Ведь прекрасно понятно о чем речь идет. Писано то на борланде. А борланд память под все переменные, массивы и прочее,прочее выделяет сразу(в случае загрузки DLL или BPL в память). Это не С++. 8-) Суть не в этом.
                                Скажу по другому - на терминальном сервере 80 одновременно работающих клиентских частей Диасофта могут занимать памяти по минимуму 80х32=2560 Мб, а по максимуму 80х164 Мб = 13GB. Понятно что все пользователи не будут работать всегда с максимальной активностью. Max 164 МБ - эмпирически зафиксированная! максимальная память выделенная под клиентскую часть Диасофта на терминальном сервере. Проверял лично.

                                Комментарий


                                • #17
                                  Сообщение от y1984 Посмотреть сообщение
                                  Буфера - это термин из 1990-х , когда писАл на простом С под PDP11/03 8-) Ведь прекрасно понятно о чем речь идет. Писано то на борланде. А борланд память под все переменные, массивы и прочее,прочее выделяет сразу(в случае загрузки DLL или BPL в память).
                                  Далеко не все и не сразу. Под глобальные - да. И то в случае если они объявлены (например массивы) как статичные.
                                  С точки зрения выделения количества памяти процессу современные компиляторы мало отличаются друг от друга. Другой вопрос как они с этой памятью работают... А это уже 99% голова и руки программиста.
                                  Сообщение от y1984 Посмотреть сообщение
                                  Это не С++. 8-) Суть не в этом.
                                  Скажу по другому - на терминальном сервере 80 одновременно работающих клиентских частей Диасофта могут занимать памяти по минимуму 80х32=2560 Мб, а по максимуму 80х164 Мб = 13GB. Понятно что все пользователи не будут работать всегда с максимальной активностью. Max 164 МБ - эмпирически зафиксированная! максимальная память выделенная под клиентскую часть Диасофта на терминальном сервере. Проверял лично.
                                  Суть действительно не в количестве занимаемой памяти. Если процессу не хватает памяти при загрузке он просто не запустится - ОС не позволит. Если не хватит динамической памяти при попытке её выделения, так же возникнет ошибка (не видел исходников Диасофта, но судя по выдаваемым ошибкам конструкция try except программистам компании известна. Допускаю, что они иногда просто "запинывают" EOutOfMemory, но глобально, во всем коде, вряд ли ). ОС и программа не ругается на недостаток памяти (по крайней мере на приведенных скриншотах).
                                  Отсюда следует, что проблема не в количестве памяти (запросы на выделение удовлетворяются!). Проблема в постоянном свопинге и загрузке/выгрузке bpl. При этом 100% происходит серьезная фрагментация файла свопа и оперативной памяти (это довольно успешно лечит TScale ).
                                  К тому же у автора вопроса bpl лежат на сетевом ресурсе, что несомненно отрицательно влияет на скорость их загрузки.

                                  Комментарий


                                  • #18
                                    Это все гадания...Надо сообщение от автора топика дождаться.
                                    Кстати с Adm32.exe и проблемой утечек памяти кто нить решил проблему? А то у меня разок уже фигня эта повлияла на работоспособность шедулера.

                                    Комментарий


                                    • #19
                                      Сообщение от y1984 Посмотреть сообщение
                                      Это все гадания...Надо сообщение от автора топика дождаться.
                                      Доброго дня :-)
                                      Простите за задержку, было много возни и беганья с бубном вокруг терминалов и диаса...

                                      1 - tscale в базовой установке не помог. Настройка (там настраивать правда и нечего) тоже ни к чему не привела.
                                      2 - Да, лежат на сетевом ресурсе, но сервера объеденены гигабитным езернетом с отдельным свичом в отдельную сеть(на серверах по две карты) Да и мониторил нагрузку - не скажу чтоб слишком 6-)
                                      Впрочем, впрочем, попытаюсь переложить библиотеки на локальный диск терминального сервера.
                                      3. Утренний тест провел.. эксперимент не совсем чистый, т.к. я один такую нагрузку создать затруднюсь, а пользователи, уставшие за неделю, не спешат сигнализировать о неполадках.
                                      Итого -
                                      На сервере 1 проблемы начались при загрузки 17% памяти (цифра с монитора метафрейм консоли) таскмгр показал 2 гб. Причем провел эксперимент - отключил часть пользователей, память высвободилсь, у пользователя на котором зафикисированы проблемы проблема осталась.
                                      На сервере 2 проблемы начались при загрузке 24% памяти. Эксперимент не проводился.

                                      Диасофт ответил что наши проболемы связаны с настройкой цитрикс сервера, за который они не отвечать не собираются %)
                                      Цитрикс предложил обратится к "разработчику вашего приложения"


                                      Любопытно, можно ли чем собрать лог о выполнении операций загрузки/выгрузки библиотек программой deal32.exe?)

                                      Ведб чтото же происходит с ним, что оно так криво работает?)

                                      Комментарий


                                      • #20
                                        Мдя...Мои соболезнования...остались только танцы с бубном как всегда с диасофтом... Есть программулина processexplorer.exe - может она поможет, хотя не факт конечно. Ну или режим отладки в диасофте включить и rti файл глянуть, мож там за что-то можно будет зацепиться.

                                        Комментарий


                                        • #21
                                          Сообщение от SergeyMV Посмотреть сообщение
                                          ...
                                          Любопытно, можно ли чем собрать лог о выполнении операций загрузки/выгрузки библиотек программой deal32.exe?)

                                          Ведб чтото же происходит с ним, что оно так криво работает?)
                                          Попробуйте FileMon http://www.microsoft.com/rus/technet...s/filemon.mspx

                                          Комментарий


                                          • #22
                                            Сообщение от IgorL Посмотреть сообщение
                                            Терминалка умеет разделять dll (грузить одну dll на несколько сессий) dll, но делает это гораздо хуже с bpl
                                            Уважаемые коллеги ! Спасибо за интереснейший тред. Хочу добавить свои 5 копеек.

                                            Во-первых - с точки зрения терминалки что DLL, что BPL одна и та же библиотека. Есть разница с точки зрения Delphi

                                            Что такое DLL ? Пишем код, добавляем в него нужные компоненты и логику обработки. Если написать в ней что-то типа Uses MyCards; то мы нарвемся на первую особенность компилятора Delphi - "Все используемые модули компилируются в DLL" - следовательно многократно используемые модули будут дублироваться в КАЖДОЙ DLL (а если там еще есть наследование и потомки - то памяти нужно будет немерянно).

                                            Другое - BPL (package) как тут уже говорили со специальными именами экспорта включает в себя ОДНОКРАТНО все включаемые модули. При загрузке пакета в память автоматически устанавливаются связи с уже загруженными пакетами, а если загружаемый пакет требует наличия еще каких-то пакетов, то загружаются и они. Кроме того, в отличие от обычных модулей, программа, использующая модули из внешнего пакета тоже не обязана включать его код. Недостаток - огромный размер BPL и то, что пакет неделим, поскольку ни один гениальный линковщик не сможет по коду догадаться - какие вам функции нужны или нет. И даже если нужно вызвать крохотную функцию - RTL закачает и загрузит, и зарегистрирует довольно приличный файл.
                                            (и очень опасная штука - если BPL цепляется за какой нибудь абстрактный класс - если разработчик не перекомпилили все пактеы при смене абстрактного класса - будет взрыв похлеще ядерного)

                                            Наверное как раз здесь - в процессе регистрации/дерегистрации и есть узкое место - и было бы крайне интересно его выявить.

                                            p.s. 5NT загружает/разгружает BPL стандартными функциями LoadPackages (см юнит sysutils.pas) и у Borland есть "фирменный глюк" с утечкой памяти в момент разгрузки памяти UnLoadPackage - остается страница в 4K. Они ее лечили на 2.0, а в 3.0 появилась, потом в 4.0 и 5.0 не было , а на 7.0 всплыла, в 7.1. вроде нет - в 2006 опять есть. Чайники, блин
                                            ---
                                            borland.public.delphi.language.basm

                                            Thank for your reply, I think you are right, and I think this is delphi 2006's

                                            The updated reproducible steps are as below:
                                            1. Create a new project group
                                            2. Create a new package (Named 'Package1.bpl'; Output Directory is '.\')
                                            3. Create another new package (Named 'Package2.bpl'; Output Directory is
                                            '.\')
                                            4. Create a new console application (or VCL Form application)
                                            5. Set application project's option: Check build with package option, and
                                            add 'Project1' in build with packages
                                            6. In application project's dpr file:
                                            uses SysUtils;
                                            ...
                                            ReportMemoryLeaksOnShutdown := True;
                                            {!!!!!!!!!!!!!!!!!!!!!!!
                                            Next line just load PACKAGE2.BPL, and even if Package2.bpl never used
                                            package1.bpl, the memory leak is also reported.
                                            If the next line is UnloadPackage(LoadPackage('dbrtl70.bpl')) then no memory
                                            leak report, BUT if the next line is
                                            UnloadPackage(LoadPackage('dbrtl100.bpl')) the memory leak is reported
                                            again.
                                            I found everything is ok if load and unload a bpl build with delphi 7, but
                                            memory leak occurred if load and unload a bpl build with delphi 2006!
                                            !!!!!!!!!!!!!!!!!!!!!!!}
                                            UnloadPackage(LoadPackage('Package2.bpl'));
                                            7. Build all project group.
                                            8. Run application.

                                            You will recive a messagebox as below:
                                            ---------------------------
                                            Unexpected Memory Leak
                                            ---------------------------
                                            An unexpected memory leak has occurred. The unexpected small block leaks
                                            are:

                                            1 - 12 bytes: Unknown x 1
                                            1645 - 1804 bytes: Unknown x 1
                                            ---------------------------
                                            OK
                                            ---------------------------

                                            Так что может быть тут Диас и ни при чем. Но опять же - нужно копать.
                                            Последний раз редактировалось bantik; 23.11.2007, 22:52.

                                            Комментарий


                                            • #23
                                              Работаю с filemon. Внешних отличий сессий сбойных от рабочих не вижу...

                                              Есть правда одно сомнительное место, впрочем оно проявляется и у рабочих пользователей, и в прямом коннекте тоже..

                                              OPEN \\myserver\DIASOFT\5NT\D5NTCORE.RUS NOT FOUND Options: Open Access: Read-Attributes
                                              OPEN \\myserver\DIASOFT\5NT\D5NTCORE.RUS NOT FOUND Options: Open Access: Read-Attributes
                                              OPEN \\myserver\DIASOFT\5NT\D5NTCORE.RUS.DLL NOT FOUND Options: Open Access: Read-Attributes
                                              OPEN \\myserver\DIASOFT\5NT\D5NTCORE.RU NOT FOUND Options: Open Access: Read-Attributes
                                              OPEN \\myserver\DIASOFT\5NT\D5NTCORE.RU NOT FOUND Options: Open Access: Read-Attributes
                                              OPEN \\myserver\DIASOFT\5NT\D5NTCORE.RU.DLL NOT FOUND Options: Open Access: Read-Attributes
                                              READ \\myserver\DIASOFT\5NT\D5NTCORE.BPL SUCCESS Offset: 2744832 Length: 16384


                                              Это что?)

                                              Комментарий


                                              • #24
                                                У меня аналогичная проблема, только Диасофт полностью живет в локальной сети. Периодически он теряет свои bpl-ки и отваливается с сообщением что bpl не найден на C: в Local Settings (что абсурдно).
                                                Сдается мне, проблема не в цитриксе. Зря Вы вообще его помянули, теперь у Диаса есть на что валить. Заметил, что процесс запуска программы, открытия любого лукапа или окна грузит процессор клиентской машины на 100%. Похоже иногда интерфейс отваливается по таймауту неуспев загрузить bpl. Сегодня написал письмо, буду настаивать на первом приоритете: Расписание заданий невозможно эксплуотировать.

                                                Комментарий


                                                • #25
                                                  У нас - терминальный доступ через Windows 2003.
                                                  2 практически одинаковых терминальных сервера, память на каждом 4 Гб. На одном все хорошо, а на другом тормозит интерфейс. Сильно заметно, если войти во внутренние документы и попытаться понажимать стрелку вверх - вниз или пробелом отмечать документы, работает очень медленно, на другом сервере вс1 в порядке- причнина ещё не выяснена. Что ещё страннее не тормозит, если тоже самое делать в плане счетов или в проводках

                                                  Комментарий


                                                  • #26
                                                    Сообщение от Drozd Посмотреть сообщение
                                                    У нас - терминальный доступ через Windows 2003.
                                                    2 практически одинаковых терминальных сервера, память на каждом 4 Гб. На одном все хорошо, а на другом тормозит интерфейс. Сильно заметно, если войти во внутренние документы и попытаться понажимать стрелку вверх - вниз или пробелом отмечать документы, работает очень медленно, на другом сервере вс1 в порядке- причнина ещё не выяснена. Что ещё страннее не тормозит, если тоже самое делать в плане счетов или в проводках

                                                    Если не секрет, сколько пользователей на 2 сервера? (всего)
                                                    Какая нагрузка считается экстремальной?

                                                    Вам же посоветую проверить бде на терминалах, возможно расхождение в настройках.

                                                    Комментарий


                                                    • #27
                                                      SergeyMV
                                                      я к сожалению не админ, нагрузка - человек 35-ть,
                                                      у нас 2- базы Ритейл и РКО проблемы с базой Ритейл. Если на терминале - где тормозит один человек - всё равно тормозит. Экстремальных ситуаций не бывает - блокировки бывают, да и то редко.

                                                      Комментарий


                                                      • #28
                                                        Сообщение от AndyElf Посмотреть сообщение
                                                        У меня аналогичная проблема, только Диасофт полностью живет в локальной сети. Периодически он теряет свои bpl-ки и отваливается с сообщением что bpl не найден на C: в Local Settings (что абсурдно).
                                                        Сдается мне, проблема не в цитриксе. Зря Вы вообще его помянули, теперь у Диаса есть на что валить. Заметил, что процесс запуска программы, открытия любого лукапа или окна грузит процессор клиентской машины на 100%. Похоже иногда интерфейс отваливается по таймауту неуспев загрузить bpl. Сегодня написал письмо, буду настаивать на первом приоритете: Расписание заданий невозможно эксплуотировать.
                                                        проверьте, в переменной path путь до того самого локал сеттингса не прописан последним?

                                                        Комментарий


                                                        • #29
                                                          Сообщение от SergeyMV Посмотреть сообщение
                                                          проверьте, в переменной path путь до того самого локал сеттингса не прописан последним?
                                                          Нет. Я не уточнил, если это как-то поможет - диас ищет bpl в C:\Documents and Settings\userN, т.е. в локальном пользовательском профайле. Очевидно в переменной path его нет.

                                                          Комментарий


                                                          • #30
                                                            AndyElf
                                                            Я тоже это один раз у пользователя видел,
                                                            что диас ищет bpl в C:\Documents and Settings\userN
                                                            на терминальном сервере.

                                                            Комментарий

                                                            Пользователи, просматривающие эту тему

                                                            Свернуть

                                                            Присутствует 1. Участников: 0, гостей: 1.

                                                            Обработка...
                                                            X