Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
06.11.2013, 10:13
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Запускаю несколько экземпляров фокса. Каждый - это робот, записи обрабатывает, таскает туда сюда, считает .. и все такое. DOEVENTS стоят везде где можно.. но все равно скорость сервера катастрофически падает, хотя сами рОботы обрабатывают записи не чаще одного раза в секунду (inkey(1) между записями, потом правда пересчет - много чтения из таблиц, но пользователей тоже много и у них нет этой проблемы). В общем скорость падает необоснованно сильно.. Когда приложение одно - все летает, когда два - ползают оба. Что нужно сделать? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 10:38
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Timer есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 10:42
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEvDOEVENTS стоят везде где можно.. Зачем роботу DOEVENTS ? MaestroEvно все равно скорость сервера катастрофически падает Что есть "скорость сервера" ? расстояние преодолеваемое сервером в единицу времени? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 10:46
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Да.. Timer естественно есть.. В нем беда? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 11:22
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEvДа.. Timer естественно есть.. В нем беда? 1. Когда прога одна, то обращение к табличкам идёт без opportunistic lock, и операции успевают выполниться за время таймера 2. Когда два эеземпляра, интервал таймера не успевает выполнить все операции и происходит накопление событий Timer. Увеличь интервал вызова таймера. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 12:35
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
PaulWistУвеличь интервал вызова таймера. Полумера это. Долгоиграющий код запустится и опять лавина сработок таймера пойдет. Да и не всегда возможно увеличивать интервал. Я в таких случаях проверяю внутри таймера сколько прошло времени с прошлой сработки. Примерно так: Timer.Timer() Код: sql 1. 2. 3. 4. 5.
This.nPrevStart предварительно создать в Timer.Init() PS Теперь я понял зачем DOEVENTS, только он мало поможет, зато создаст тормоза и необъяснимые глюки. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 14:54
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Dima TPaulWistУвеличь интервал вызова таймера. Полумера это. Долгоиграющий код запустится и опять лавина сработок таймера пойдет. Да и не всегда возможно увеличивать интервал. ... Дык, ТС не озвучил, что его код делает и почему надо запускать таймер (хотя можно запустить виндовое задание) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 17:13
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
PaulWistДык, ТС не озвучил, что его код делает и почему надо запускать таймер (хотя можно запустить виндовое задание) как говориться "правильно заданный вопрос содержит половину ответа" Гадать не будем, захочет - сам напишет. С таймерами у многих проблемы потому что не знают как он реально работает. В хэлпе не упомянули что он может несколько раз подряд сработать, и даже сработать если на текущий момент остановлен. Это происходит потому что таймер только шлет сообщения в очередь виндовса с заданной периодичностью, а когда сама обработка сообщения произойдет - это зависит от того когда приложение освободиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 18:02
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Это мелкая программка - форма, висит и смотрит директории. И делает что-то с табличками в зависимости от того что пришло. На каждый магазин, (работаем в терминале) - висит одна такая программка. Когда стояли на разных серверах - все ок. Счас поставили на один сервак и все стало медленно, хотя сервак мощный. Увеличил время таймера. На самом деле програмок еще больше.. Есть еще фоксовские пересылщики фаликов и почта на фоксе.. В общем все на таймерах и куче мелких фоксовских програмок делающих все в зависимости от того что кому и куда пришло... Все работает шустро если каждая эта программка на одном компе. Надо попробовать их в разные терминальные сессии загнать.. Ведь нет же проблем с сотней пользователей фокса, а они все на этом же серваке... и у них тоже есть в программе таймеры. Я думал, мож настройка какая-то есть в виндосе, чтобы каждая програмка на сервере работала не мешая друг другу. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 18:08
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Dima TPaulWistДык, ТС не озвучил, что его код делает и почему надо запускать таймер (хотя можно запустить виндовое задание) как говориться "правильно заданный вопрос содержит половину ответа" Гадать не будем, захочет - сам напишет. С таймерами у многих проблемы потому что не знают как он реально работает. В хэлпе не упомянули что он может несколько раз подряд сработать, и даже сработать если на текущий момент остановлен. Это происходит потому что таймер только шлет сообщения в очередь виндовса с заданной периодичностью, а когда сама обработка сообщения произойдет - это зависит от того когда приложение освободиться. Упс.... То есть таймер отработал, а виндовс занят.. ждем, а таймер в это время еще раз в очередь сработал.. а как виндовс освободился - пошло выполнение кода по таймеру, и хоть мы таймер и отключили - вторая его сработка уже ждет нас в очереди и запускается?.. Ну это не страшно, таймер у меня лишь нажимает кнопки "обработка" и т.п. и отключает все кнопки и себя на форме пока не доделает.. Как доделает - включает кнопки и себя .. и если второй раз он уже в очереди сидит - то пусть сработает - нет проблем вроде.. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 18:33
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEvУпс.... То есть таймер отработал, а виндовс занят.. ждем Не виндовс а твоя прога. Таймером рулит виндовс. Если по простому, то прога дает команду виндовсу "извещай меня каждые X.XXX сек.", что виндовс и делает. Но это "извещение" это не запуск кода, а сообщение в очередь сообщений твоей проги. Подробнее тут, в середине "Алгоритм выборки сообщений из очереди потока" Если ты своевременно не обрабатываешь сообщения они копятся в очереди и дальше кучей обрабатываются. Например: поставил ты таймер раз в секунду и запустил расчет на 10 секунд, после его отработки обработались те 10 сообщений которые накопились за это время, т.е. 10 раз подряд (без пауз) запустился метод Timer(). Причем обработались они подряд без всяких пауз, т.к. фокс их только извлекает из очереди сообщений. Тоже с отключением таймера: если на 9-й секунде ты его выключишь, то предыдущие 8 уже в очереди на обработку и никуда не исчезнут, т.е. будут в итоге обработаны. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.11.2013, 19:30
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEvНу это не страшно, таймер у меня лишь нажимает кнопки "обработка" и т.п. и отключает все кнопки и себя на форме пока не доделает.. Если все не страшно то зачем топик тогда создал? Таймер "нажмет" любую кнопку, в т.ч. отключенную. Проблема в чем? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.11.2013, 02:02
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Dima TMaestroEvУпс.... То есть таймер отработал, а виндовс занят.. ждем Не виндовс а твоя прога. Таймером рулит виндовс. Если по простому, то прога дает команду виндовсу "извещай меня каждые X.XXX сек.", что виндовс и делает. Но это "извещение" это не запуск кода, а сообщение в очередь сообщений твоей проги. Подробнее тут, в середине "Алгоритм выборки сообщений из очереди потока" Если ты своевременно не обрабатываешь сообщения они копятся в очереди и дальше кучей обрабатываются. Например: поставил ты таймер раз в секунду и запустил расчет на 10 секунд, после его отработки обработались те 10 сообщений которые накопились за это время, т.е. 10 раз подряд (без пауз) запустился метод Timer(). Причем обработались они подряд без всяких пауз, т.к. фокс их только извлекает из очереди сообщений. Тоже с отключением таймера: если на 9-й секунде ты его выключишь, то предыдущие 8 уже в очереди на обработку и никуда не исчезнут, т.е. будут в итоге обработаны. Странно но нет этого.. Внутри кода таймера, первое что я делаю, отключаю таймер. И прога ничего не ждет как только запустилась. И по кнопкам тоже.. Я ж проверяю, активна кнопка или нет и могу ли я ее кликнуть..... А топик завел, потому что хотел узнать, можно ли сделать так, чтобы в одной терминальной сессии запущенные экземпляры фокса работали так же шустро, как запущенные в разных сессиях. Выяснилось, что в разных сессиях они не тормозят друг друга, но неудобно иметь кучу сессий... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.11.2013, 07:29
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEvСтранно но нет этого.. Внутри кода таймера, первое что я делаю, отключаю таймер. И прога ничего не ждет как только запустилась. И по кнопкам тоже.. Я ж проверяю, активна кнопка или нет и могу ли я ее кликнуть..... Сделай запись в лог о всех действиях таймеров и посмотри так ли все происходит как ты думаешь. MaestroEvА топик завел, потому что хотел узнать, можно ли сделать так, чтобы в одной терминальной сессии запущенные экземпляры фокса работали так же шустро, как запущенные в разных сессиях. Выяснилось, что в разных сессиях они не тормозят друг друга, но неудобно иметь кучу сессий... Неверный вывод. Для производительности нет разницы в одной терминальной сессии или в разных запущены проги (если ты сам не прописал их взаимодействие меж собой). Ищи другие причины тормозов. Для начала определись что тормозит: процессор или файловый ввод/вывод. Диспетчером задач посмотри на сколько твои роботы процессор грузят. Логи пиши с указанием времени, потом ищи наиболее тормозное место в коде. Дальше с ним разбирайся. Может тормоза от лишнего inkey(1) :) Есть ощутимая разница когда один процесс работает с таблицей или несколько ("работает" значит держит открытой). Особенно заметно если работа по сети. Т.е. открыв по сети одну и туже DBF в двух прогах получишь замедление чтения/записи до 10 раз по сравнению с одной прогой. По разным сессиям есть смысл разносить когда несколько прог одновременно используют внешние приложения. Например был случай когда запускались две проги для генерации экселевских файлов (разных), эксель периодически зависал и одну из прог завешивал. Начал запускать под разными ползователями - проблема исчезла. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.11.2013, 05:07
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2013, 01:25
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEv... Выяснилось, что в разных сессиях они не тормозят друг друга, но неудобно иметь кучу сессий... VFP itself - это старый добрый COM+ object и скорее всего не многопоточный. Отсюда открытые в одной сессии объекты могут мешать друг другу борясь за одинаковые ресурсы. Когда же Вы открывете VFP объект в разных терминальный сессиях - Windows создает Вам изолированные среды исполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2013, 01:30
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Dima T ... Например был случай когда запускались две проги для генерации экселевских файлов (разных), эксель периодически зависал и одну из прог завешивал. Начал запускать под разными ползователями - проблема исчезла. Запускание Excel в таком виде не рекомендуется так как он использует профайлы клиента для своих временных файлов ресурсов. Microsoft рекомендует использовать другую архитектуру для того, что Вы описали... но только не использование самого Excel :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2013, 09:57
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Sergey ChVFP itself - это старый добрый COM+ object и скорее всего не многопоточный. Отсюда открытые в одной сессии объекты могут мешать друг другу борясь за одинаковые ресурсы. Не согласен. За какие конкретно ресурсы могут бороться два фоксовых приложения в одной пользовательской сессии? Поверю, если увижу конкретный тест это подтверждающий. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2013, 13:59
|
|||
---|---|---|---|
|
|||
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEv, Знание не сваливается с потолка, но получается из опыта. Набросок опытной схемы приведён в конце сообщения. Для его запуска служит командник из 3 строк start vfp9 DoTimer.fxp 'Timer1' start vfp9 DoTimer.fxp 'Timer2' start vfp9 DoTimer.fxp 'Timer3' Результат запуска. Индикация срабатывания таймера в каждом каждом приложении проходит своевременно, но окна каждого приложения реагируют на перетаскивание левой кнопкой мыши за строку заголовка окна с большой задержкой. И эта задержка ощущается, пока хоть в одном окне из трёх выполняется таймер. Чтоб получить больше полезных сведений, придётся вставить в опытную схему больше реальных подробностей. Возможно, есть смысл оформить приложение как exe-файл. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2013, 14:10
|
|||
---|---|---|---|
|
|||
Несколько экземпляров фокса на сервере |
|||
#18+
Rostislav D. Kudryashov, увы, при оформлении приложений как exe-файлы интерактивная реакция их окон не ускоряется. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2013, 14:32
|
|||
---|---|---|---|
|
|||
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEv, а вот замена "SleepSDK(3000)" в процедуре Timer() на Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.11.2013, 15:09
|
|||
---|---|---|---|
|
|||
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEv, Окна приложений стали идеально интерактивно реагировать после следующего переоформления класса FatTimer. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.11.2013, 12:39
|
|||
---|---|---|---|
|
|||
Несколько экземпляров фокса на сервере |
|||
#18+
MaestroEv, вот ведь оказия! Если при самоостановке, когда в Timer() выполняется THIS.Interval=0 или THIS.Enabled=.F., выполняется также и DOEVENTS, то все застрявшие из-за выполнения таймера большего, чем Interval, вызовы сразу гасятся. Их отсечка через LastWorked становится ненужной. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.11.2013, 15:25
|
|||
---|---|---|---|
Несколько экземпляров фокса на сервере |
|||
#18+
Rostislav D. KudryashovMaestroEv, а вот замена "SleepSDK(3000)" в процедуре Timer() на Код: plaintext 1. 2. 3. 4.
READ EVENTS чем не устроил? Зачем этот велосипед с квадратными колесами? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.11.2013, 15:40
|
|||
---|---|---|---|
|
|||
Несколько экземпляров фокса на сервере |
|||
#18+
Dima T, вообще-то READ EVENTS меня устроил, но расположил я его не в том месте, которое ты мне процитировал, а в запускающей PROCEDURE DoTimer(). Из текста примера ты должен был заметить, что по нажатию Ctrl+F12 выполняется CLEAR EVENTS. А процитированный тобой фрагмент содержит не "квадратные колёса", а DOEVENTS, необходимый для гашения вызовов Timer(), застрявших в Windows из-за времени обработки события SECONDS() + 3, большего чем FatTimer.Intreval = 1000 (и тем более = 100). Кроме того, я предполагаю, что DOEVENTS ускоряют интерактивную реакцию окна приложения. Хотя, в этом плане, мне не всё так очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=41&tablet=1&tid=1582846]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 294ms |
total: | 430ms |
0 / 0 |