Всем привет!
3й день воюю с связкой TCPServerEX и SQlite.
Делаю приложение web сервер для 7-10 пользователей.
1 пользователь вносит данные в BD, остальные через web интерфейс эти данные получают.
С генерацией web страниц и отдачей контента проблем нет.
В примере TCPServerEX элементы схемы располагаются внутри мультика TCPServerEX, по такому же принципу разместил внутри мультика компоненты для работы с БД sqlite..наткнулся на проблему: при подключении пользователя программа начинает "есть" память..каждое подключение пару сотен КБ оперативы съедает...когда пользователь отключается память не очищается...хотя точка ##count TCPServerEX сообщает что копий массива схем 0 т.е. как я понимаю все пользователи отключились и отработанные экземпляры схем удалены.
В связи с чем вопросы:
1) Можно ли в мультик запихивать компоненты для работы с БД sqlite?
2) Как реализовать правильную связку TCPServerEX + Sqlite чтобы не съедалась память и был "многопользовательский" режим? (при условии что все пользователи просто читают данные, только 1 пользователь вносит данные в БД)
code_33010.txt
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
| ||
файлы: 1 | code_33010.txt [2.4KB] [192] |
Ответов: 1343
Рейтинг: 31
|
|||
могу предположить что можно разорвать эту схему на 2 схемы и путём передачи параметров в приложение сообразить многопользовательский режим да и память там не будет так кушать
|
|||
карма: 2 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 2 раз(а), последний 2017-06-17 20:31:07 |
|||
карма: 0 |
|
Ответов: 1058
Рейтинг: 76
|
|||
77.106.199.165 писал(а): Товарищи,выручайтеКак? Интересный у Вас подход к решению собственной задачи. Предлагаете додумываться как и что доделать в сервере, потом под него сделать клиент, потом все проверить и подать на блюдечке Для помощи Вам, от Вас требуется: минимальная рабочая схема с проявлением описанного эффекта. Чтобы желающие Вам помочь, запустили схему и увидели описанную проблему, а не сушили себе мозги как воссоздать на своем компе Вашу ошибку. |
|||
карма: 0 |
|
Ответов: 655
Рейтинг: 18
|
|||
Tom-it не ругайся)я в начале топика довольно подробно описал все и там же выложил схему.
Простейщий пример БД: [urlhttp://forum.hiasm.com/forum_serv.php?q=56&id=3692[/url] Пример схемы: http://forum.hiasm.com/xf/attach/code/code_33010.txt Что выполняет данная схема: При коннекте пользователя производится обычный select * from table; из полученны данных формируется html страница и выдается пользователю. После каждого подключения пользователя съедается несколько десятков-сотен КБ оперативы, после отключения пользователя память не очищается, хотя ##count TCPServerEX показывает 0 ..т.е. все экземпляры схем отработали и удалены. |
|||
карма: 0 |
|
Ответов: 1058
Рейтинг: 76
|
|||
Gunnman писал(а): не ругайсяGunnman писал(а): каждое подключение пару сотен КБ оперативы съедает...когда пользователь отключается память не очищаетсяВ программировании не силен и помочь врядли чем смогу, но некоторые наблюдения опишу. Для начала - пустая форма жрет память. Попробуйте пустую форму подвигать, поклацать, свернуть, развернуть ... И Вы увидите как память увеличивается на несколько кб. Второе попробуйте для веса в TCPServerEX вложить 1мбайт далее переключайте клиентов и вы увидите, что память меняется в двух направления. Тоесть увеличивается и уменьшается. Наверное проблема не в TCPServerEX ------------ Дoбавленo в 19.02: Самое главное чтобы память уменьшалась, пусть даже не до исходного состояния. ... в исходном состоянии 1мб, при конекте клиентов 10мб, при отключении клиентов возвращалась к 2мб и держала их, даже спустя год- два беспрерывной работы. |
|||
карма: 0 |
|
Ответов: 655
Рейтинг: 18
|
|||
Ну собственно вынес SQLite_DB за мультик, память стало жрать меньше, оно и понятно, т.к при создании нового экземпляра схемы в мультике БД заново не открывается.
Результаты такие: Приложение при 0 коннектов 1900-2000кб. Приложение при 500 коннектах 40 000 - 47 000кб. Приложение после разрыва 500 коннектов 2200-2300Кб. Повтор без перезапуска приложения: Приложение при 0 коннектов 2300кб. Приложение при 500 коннектах 40 000 - 47 000кб. Приложение после разрыва 500 коннектов 2440Кб. Т.е память всеравно потихоньку жрется...и через какое-то время приложение свалится. Господа...объясните мне твердолобому в чем проблема? TCPServerEX сам удаляет экземпляр схемы после ее отработки или нет? ##count показывает что подключений 0 |
|||
карма: 0 |
|
Ответов: 1343
Рейтинг: 31
|
|||
Gunnman писал(а): Т.е память всеравно потихоньку жрется...и через какое-то время приложение свалится.так а кто мешает сделать внешнее управление ресурсами? берёшь и делаешь новую програмку которая будет следить за памятью и за сервером тоесть если память уж прям впритык к примеру атака была совершена то перезапустить сервак если же он сам упал то запустить такая мелкая програмка не должна упасть ну или можно вообще сделать через CMD там то уж точно ничё не упадёт |
|||
карма: 2 |
|
Ответов: 655
Рейтинг: 18
|
|||
Такой вариант не подойдет.
------------ Дoбавленo в 01.21: Вопрос решен! Проблема была в StrCatDelim...использовал данный компонент для склеивания заголовка HTTP и контента. Компонент имеет собственный буфер, после того как экземпляр мультика отработал (в котором находится StrCatDelim) буфер данного компонента не очищался..или очищался не полностью (даже после удаления экземпляра схемы!) в результате чего возникал эффект "поедания памяти". Так же SQlite_DB нужно помещать за мультик дабы при создании нового экземпляра схемы БД еще раз не открывалась. |
|||
карма: 0 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Gunnman писал(а): Компонент имеет собственный буферНет там никакого буфера, кроме строковых переменных. |
|||
карма: 22 |
|
Ответов: 655
Рейтинг: 18
|
|||
doClear - очищает внутренний буфер результата операций.
Пока не стал использовать данную точку в StrCatDelim - оперативка елась..пусть по 10-20кб но постоянно елась! ------------ Дoбавленo в 01.57: nesco, попробуй эту схему в мультике в 2х вариантах: 1) после склейки строк выполнять doClear в StrCatDelim, затем удалять экземпляр схемы. 2) не использовать doClear и сразу удалять экземпляр схемы. У меня в втором варианте оперативка постоянно съедается...
Для лучше эффекта используй любой файл весом от 100кб. |
|||
карма: 0 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Gunnman писал(а): попробуй эту схему в мультике в 2х вариантахПопробовал в обычном мультике -- никуда ничего не съедается, а колеблется вокруг некоторого среднего значения, что естественно. |
|||
карма: 22 |
|
12