Несколько дней назад я внедрил систему автозаполнения предложений, которая работает со словарем в зависимости от языка. Вот как это работает:
Автозаполнение пользовательского интерфейса JQuery -> вызов файла .php -> вызов функции DLL DLL VB6 -> вызов файла .sqlite и поиск результатов по набранным буквам -> возврат результатов в php -> возврат результатов в JS.
Он работает достаточно быстро, так как в среднем для выполнения каждой операции требуется ~ 7 (миллисекунд). В часы пик аналитика Google показывает ~ 1200 онлайн-пользователей, и обычно каждый день мы получаем ~half a million
вызовы этой конкретной функции.
Со дня, когда эта система автозаполнения была запущена, я начал замечать сотни двух очень специфических сообщений об ошибках:
Not enough storage is available to complete this operation.
CoInitialize has not been called.
Некоторая информация, которая может помочь:
а) Эти сообщения появляются в основном во время пика посетителей Гора
б) Они не всегда появляются только с определенной функцией, но и с другими (НО никогда не делали до того, как мы внедрили вышеупомянутую систему)
c) Я использовал базы данных sqlite раньше для других вещей (хотя не столько в режиме реального времени, сколько для возврата результатов, когда пользователь печатает), но никогда такой проблемы не возникало
d) Размер файла sqlite составляет ~ 350 МБ с 3 таблицами, в одной из которых ~ 2,2 миллиона записей, в другой — 1,6 миллиона, а в другой ~ 16 тысяч записей и все необходимые столбцы проиндексированы.
e) Очевидно, эта база данных используется только для чтения.
е) Как только система отключается, все сообщения останавливаются.
ж) Я получаю около тысячи таких сообщений об ошибках каждый день для каждого сообщения (около 500 000 обращений к функции / день)
Серверная система состоит из двух (x2) блоков: Core I7 4770 с тактовой частотой 3,8 ГГц, 32 ГБ ОЗУ, Windows Server 2012 и IIS.
Сообщения появляются случайно и только в часы пик. Я не могу воспроизвести проблему на компьютере разработчика. Поиск в интернете до сих пор был бесплодным. Любые идеи о том, что вызывает это и как решить, будут более чем приветствоваться.
Спасибо.
Тот факт, что это временная проблема, которая возникает только во время пиковых нагрузок, говорит о том, что что-то не хватает памяти — вероятно, ваша VB DLL (это, вероятно, единственное место, где CoInitialize
называется).
Я видел похожие проблемы со слишком большим количеством запущенных приложений и winDoze, у которых не хватало «системных дескрипторов» — у меня есть расширенный сервер w2K, который я использовал в качестве настольного компьютера (потому что m $ не предоставляет путь обновления от экземпляра AS до настольного компьютера) обычно с дюжиной окон Explorer, WinSCP с 8-10 вкладками, несколькими сессиями PuTTY, несколькими окнами DOS, подключениями к удаленному рабочему столу, Firefox с 184 вкладками в 4 окнах, Thunderbird отслеживает 40 учетных записей электронной почты, WinAmp и некоторые другие — и PaintShopPro и PhpED просто делают не хотите работать одновременно из-за вышеупомянутого ограничения дескриптора системы.
Ваши проблемы может быть исправить это, просто добавив больше оперативной памяти, но вам, вероятно, следует проверить производительность и проверить настройки системы.
Других решений пока нет …