0

我们有一个传统的第三方电话系统,它建立在一个叫做“CT ADE”的东西上,它会定期挂起几秒钟(5 到 30 秒)然后恢复。在这些挂起期间,用户会在电话菜单中遇到令人沮丧的停顿。这种情况至少已经持续了几个星期。

这段代码不是我写的,所以我对它的了解非常有限。内部有多个“任务”(线程?),每条电话线一个,处理呼叫。当应用程序挂起时,所有“任务”都会挂起。

这个问题似乎与负载无关。即使在使用率低的时候也会发生。它似乎与网络无关(发生在数据库与此应用程序位于同一物理框的系统上)。似乎与网络或磁盘无关,尽管创建执行大量 DB I/O 和文件 I/O 的示例任务可能会导致此应用程序中的暂停时间较短。

出现问题时,该进程不会显示任何内存或 CPU 峰值。

在这一点上,我只是抓住任何尝试......

4

3 回答 3

0

使用遗留代码是痛苦的——根据我的经验,你只需要潜入并尝试通过任何适合你的方式来理解代码在做什么——无论是通过阅读代码并试图弄清楚它的作用,还是调试各种场景并逐步执行执行的每一行代码。

这将需要一段时间,并且会有部分代码您永远无法理解,但是如果有足够的时间盯着代码并尝试它的作用,您最终应该能够理解到足以找出问题所在。

有一本书我从未读过,但它是非常好的。

于 2010-02-16T14:55:57.753 回答
0

尝试在其中一次挂起期间运行采样分析器以查看 CPU 时间花费在何处。

于 2010-02-16T15:03:57.113 回答
0

如果问题与高 CPU 使用率无关,则配置文件可能不会为您带来任何好处。

对我来说,这听起来像是一个多线程问题。如果可能,请使用调试器附加并在问题出现时暂停。查看所有线程当前执行的代码/调用堆栈。可能是多个线程尝试访问单个资源或线程安全函数并且必须等待,因为另一个线程对该资源具有独占访问权。这可能是一些不起眼的事情,比如尝试写入日志。

于 2010-02-16T15:39:58.533 回答