我已经在ServerFault上询问了这个问题的变体,但我认为从中获得开发视角会很有用。
我们为客户运行多个应用服务器,运行商业软件应用程序。我们的客户通过基于Web的自定义应用程序访问应用程序。
最近,一个2012R2服务器实例给我们带来了真正的麻烦;经过几分钟的处理后,应用程序会有效地冻结 - 它仍在运行且响应迅速,但没有处理数据。应用程序进程开始占用CPU时间的整个虚拟核心(即有4个核心,占用25%)。
该应用程序是一个相当古老的C ++二进制文件。供应商已将此问题跟踪到应用程序中的计时器问题,他们已经说过:
线程WM_TIMER消息是优先级最低的消息。计时器可以 如果机器处于负载状态,请延迟。这不是这种情况 计时器永久停止。它也可以通过 破解漏洞或其他恶意第三方代码。
在进一步的对话中,他们坚信这是服务器或环境问题,而不是代码中的错误。
我是一名.NET开发人员,在我有限的经验中,计时器停止是一种罕见的事件,通常是由于我的代码出错而导致计时器线程崩溃或永不退出。
我们的服务器已修补并且是最新的,没有直接的用户访问权限,它有防病毒(卡巴斯基),并且在任何其他服务器上没有类似行为的迹象。我把服务器脱机并尝试了“裸机”病毒扫描,但没有发现任何恶意软件。
我对供应商对该问题的分析持怀疑态度:最近我们的应用程序遇到了其他问题,高CPU使用率感觉更像是一个无限循环问题 - 计时器触发,卡在某些东西上然后永远不会回来但是,我没有WM_TIMER
s的经验,所以我的问题是:是他们的推理声音,服务器上的其他一些恶意应用程序或进程是否会导致应用程序计时器停止?