几天前,我实现了一个自动完成建议系统,它根据语言使用字典。下面是它的工作原理: JQuery UI 自动完成 -> 调用 .php 文件 -> 调用 VB6 COM dll 函数 -> 调用 .sqlite 文件并根据键入的字母查找结果 -> 将结果返回到 php -> 将结果返回到 JS。
它的运行速度相当快,因为它平均需要 ~7(毫秒)才能完成每个操作。在高峰时段,Google Analytics 显示约 1200 名在线用户,通常我们每天都会收到约半百万调用此特定功能。
从这个自动完成建议系统上线那天起,我就开始注意到数百条两条非常具体的错误消息:
Not enough storage is available to complete this operation.
CoInitialize has not been called.
一些可能有帮助的信息:
a) 这些消息主要出现在访客高峰时段
b) 它们并不总是只出现在特定功能上,而是出现在其他功能上(但在我们实现上述系统之前从未出现过)
c) 我以前使用 sqlite 数据库来处理其他事情(虽然没有那么“实时”,因为在用户键入时返回结果)但是从来没有出现过这样的问题
d) sqlite 文件的大小约为 350MB,有 3 个表,其中一个有约 220 万个条目,另一个有 160 万个条目,另外约有 16000 个条目,所有必要的列都已编入索引。
e) 显然这个数据库是用来做只读操作的
f) 一旦系统被禁用,所有消息都会停止。
g) 对于每条消息,我每天都会收到大约一千条这样的错误消息(每天大约调用 500.000 次函数)
服务器系统是两个 (x2) 机箱:Core I7 4770,3.8GHZ,32GB RAM,Windows Server 2012 和 IIS。
消息随机出现,并且仅在高峰时段出现。我无法在开发机器上复制该问题。到现在上网查无果。我们非常欢迎任何关于导致它的原因以及如何解决的想法。
谢谢。
最佳答案
事实上这是一个仅在高峰使用时间发生的暂时性问题,这是一个非常明显的迹象表明内存不足 - 可能是您的 VB DLL(这可能是 CoInitialize 正在运行的唯一地方称为)。
我已经看到类似的问题,有太多的应用程序正在运行并且 winDoze 用完了“系统句柄” - 我有一个 w2K 高级服务器盒我一直用作台式机(因为 m$ 不提供从 AS 实例到桌面的升级路径一)通常运行十几个资源管理器窗口,带有 8-10 个选项卡的 WinSCP,几个 PuTTY session ,几个 DOS 框,远程桌面连接,在 4 个窗口中有 184 个选项卡的 Firefox,Thunderbird 观看 40 封电子邮件帐户、WinAmp 和其他一些 - 由于上述系统句柄限制,PaintShopPro 和 PhpED 不想同时运行。
您的问题可能只需在问题上投入更多 RAM 即可解决,但您可能应该进行一些性能检查,并检查系统设置以进行调整。
关于php - sqlite 和窗口 : Not enough storage is available to complete this operation and CoInitialize has not been called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157910/