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