我在Win2012R2上使用Access-Databases的一堆(大约50个)经典ASP-Sites存在问题,这让我们感到疯狂。
此服务器上所有站点的所有asp页面都可以平稳运行大约45秒,在此之后它们(全部)完全停止响应任何点击15到20秒,然后这个延迟在接下来的45秒内再次消失,就像它从未存在过一样之前,它再次出现 - 依此类推。几个月前,几个月没有任何问题,这种效果始于无关紧要。
静态HTML页面不会受到影响,似乎即使没有连接到数据库的asp页面运行也不错。因此,我们尝试了从Access转换为SQLExpress的测试,但这并没有改变任何东西 - 即使转换的网站也以同样的方式受到影响(因此它似乎不是Access)。
然后,我们尝试停止IIS中的所有站点,并重新激活一个只有少数访问者的站点,以查看是否只有在向服务器发送许多请求时才会显示。但即使在重新启动IIS之后,甚至在重新启动整个机器之后,只有一个网站在IIS中激活,效果仍然显示出来。它似乎完全独立于效果的数量,就像服务器(而不是IIS的asp引擎)在周期性模式中忙于自己。
我们在性能监视器中可以看到什么(参见屏幕截图):当request / sec在某个时刻降到0时,当效果开始时,执行的请求数量从正常级别(对我来说看似“逻辑”)持续累积,但是只描述效果,而不是合理的,来自哪里)。效果消失前几秒,请求/秒再次增长,这些计数器恢复为正常值。
我们在一年前在Windows 2008服务器上遇到过类似的问题,这些网站在几年内没有任何问题地运行,然后它从无到有。在测试了另一个主机服务器上的一些站点后,我们发现,他的服务器上没有出现Windows 2012 R2的问题(并且仍然没有整整一年,而在那里托管我们的3个站点)。在另一个虚拟Windows 2012R2-Server的托管服务商,我们有另一个网站托管的流量超过我们大多数其他网站,甚至在那里,问题从现在整整一年都没有出现。所以我们的主机切换到WinServer2012R2和 - 宾果 - 所有问题都消失了。从那一刻开始,所有网站都再次表现出魅力,而不会改变操作系统。
然后我们停止调查这个问题,认为问题与操作系统有关。但大约9个月后,它重新出现,经过数小时和数小时的调查,我们不知道,搜索什么和做什么(除了将我们所有的网站移动到其他主机服务器,这不是一个真正的解决方案对于问题而我们无法保证,将来有时候这种效果不会重新出现在这台机器上。
我明确地找到了自己的解决方案,但是以一种完全随机的方式。在寻找问题的解决方案几周后,我致力于清理服务器的硬盘并删除了Windows / temp-folder中的所有文件(> 18.000个文件!)。从那时起(4天前),所描述的响应延迟从未出现过!但是在该文件夹中创建了一小堆新的.tmp文件。
我的理论是:也许每次用户访问其中一个网站(打开与其Access数据库的连接,导致数据库文件夹中的.ldb文件),一个随机(?)命名的.tmp文件(如:jet12f0。 tmp)在Windows / temp文件夹中并行创建。当数据库连接关闭且.ldb消失时,这些文件将被“正常”删除。也许某些连接未正确关闭,因此Windows / temp文件夹中相应的.tmp文件作为“孤儿”驻留在那里,字面意思是永远。随着时间的推移,文件夹填满了这些孤立的文件。接下来,应该生成一个新的.tmp文件,但是名称仍然存在“孤立”.tmp文件。这现在导致服务器停止所有操作,因为无法建立新文件,命名为现有文件。在15到20秒之后,冲突通过某种机制解决(我不知道)并且所有运行再次完美,直到下一次冲突在45秒后出现。等等...
我必须假设:这只是一个“业余”理论,我不是服务器“大师”。
不时清理此临时文件夹似乎会阻止服务器进入这种情况,因为没有文件/命名冲突。
我同意:真正的解决方案是在代码中找到问题(如果有的话),但是我们可以忍受这种情况,比较一下在一个月左右就清理一次临时文件夹来找到问题的努力;-)