Исправить программу на Delphi
Требуется исправить программу, которая выполняет MySql запросы. Через некоторое время под нагрузкой она перестает работать.
Более подробное ТЗ в прикрепленных файлах ниже.
Исходники скину исполнителю.
Applications 2
-
"Если же увеличить, например, до 5120, то через некоторое время перестает работать (на веб запросы к ней отвечает, но запросы в БД не выполняет). И появляется ошибка о недостатке памяти. Но я никогда не видел, чтобы программа использовала больше 200 мб памяти. После перезапуска опять работает некоторое время, после чего история повторяется."
Видите, у вас ошибка "Thread creation error"? При создании потока выделяется память как в UserMode, так и в ядре системы. И вот эта память в ядре системы с особыми свойствами, в частности, она не может быть вытеснена на диск, в файл подкачки. Она обязательно всегда должна находиться в реальной оперативной памяти. И её не очень много. Грубо говоря, вы создаёте слишком много потоков.
Но думаю, что причина ещё несколько глубже. Из этого множества потоков вы одновременно создаёте слишком много файлов. Насколько я представляю себе работу драйверов файловой системы Винды, они для такого просто не предназначены. Нет, она не падает, но работать начинает очень неэффективно, расходуя тот самый драгоценный пул памяти в ядре, который нельзя свопировать на диск.
Я бы посоветовал перепроектировать программу в этом месте. Есть менее ресурсоёмкие решения.
----------------
Мне тут подсказывают, что я ошибся и, похоже, это так и есть. Я не обратил внимание на то, что процесс у вас 32битный. Обычно по умолчанию размер стека резервируемого для вновь создаваемого потока равен 1Мб. И 5120 новых потоков просто исчерпают всё адресное пространство 32 своими стеками.
-
17 На посмотреть розобраться цена такая.
Смотрим исходники и какие компоненты используються.
Тогда можно о чемто говорить.
А так с того что есть сразу скажу тупиковый подход. Нужно менять логику, на всех пользователей ядер не хватит некогда.
-
84 1 0 1 Важный вопрос: программа раньше работала стабильно или начала сбоить начиная с какого-то времени?
А то при отсутствии ограничения на максимальное количество соединений и при наличии дудосеров, ваш сервер можно легко положить.
-
548 70 13 2 Готов заняться Вашей задачей. Проблема с нехваткой памяти и с таймаутом для запросов понятны - но надо понимать, что безграничных ресурсов всё равно не возникнет. Ещё желательно знать версию используемого Вами SQL-сервера. Подробнее могу сказать после того, как посмотрю исходники.
-
1321 62 2 1 Здравствуйте,
насколько я понял, какие-то запросы вызывают задержку/нехватку памяти - программа перестаёт работать. Если есть доступ к базе и можно получить текст запроса, смогу переписать.
-
При таком количестве (5120) одновременных запросов к РБД вам понадобится машина баз данных (например от Оракл) или услуги провайдеров облачных технологий c репликацией РБД, а не персональный компьютер с MySQL.
-
Current freelance projects in the category Desktop Apps
Small edit on the website
16 USD
Need to update the offer agreement in the footer to a new one, the company has changed its regulations Task will take 20 minutes Web Programming, Desktop Apps ∙ 15 hours 40 minutes back ∙ 94 proposals |
Account reconciliation tool with the bank, cards, and accountantTechnical Assignment: Tool for Reconciling Accounts with Bank, Cards, and AccountantGeneral Goal A local tool (script/small application in Python) is needed, which is manually run once every 1-2 months on my computer and performs reconciliation between: Invoices I issued to… Python, Desktop Apps ∙ 2 days 22 hours back ∙ 42 proposals |
Add pauses of 10-30 seconds between sending emails.Hello! I am looking for an experienced 1C / BAS (BAF) programmer to promptly resolve a technical issue with email distribution.Problem essence: We use the accounting program BAF (Business Automation Framework), version 2.0. Once a month, there is a need to send about 300 emails… Web Programming, Desktop Apps ∙ 8 days 14 hours back ∙ 10 proposals |
Reverse engineering of console utilities for querying SSD controllers (Flash ID)1. Purpose of the work Extraction of the application programming interface (API) for interaction with SSD/NVMe controllers from the provided set of console utilities (Phison, Silicon Motion, Realtek, Maxiotek, Marvell, JMicron, etc.). The result should be working code in C/C++… C & C++, Desktop Apps ∙ 9 days 2 hours back ∙ 6 proposals |