我的应用程序部署在客户站点,我无法访问,并且没有互联网连接。
有人抱怨说,在一些网站中,一周左右,应用程序就会无法响应,因此运营商需要杀死并重新启动它。
我们无法在我们的网站上观察到它。
我能做些什么可以帮助我找到问题吗?
这是VC2008 Win32 MFC
个应用程序。
应用程序非常复杂,包括许多线程,同步机制,数据库访问,HMI,通信渠道......
注意:客户可以向我们发送日志文件。
注意:应用程序不会崩溃。它只是挂起。由于我不知道问题的本质是什么,我无法以编程方式知道出了什么问题(或者我呢?)
答案 0 :(得分:3)
答案 1 :(得分:2)
我会从一些问题开始 - 在这些反应迟钝的时候CPU是否已经陷入困境?是否有一个特定的过程正在占据它? (您可以使用PerfMon来获得答案)。根据答案的不同,我可能会在此阶段进行转储(Procinump by sysinternals非常适合这些目的)并在线下进行调查。
答案 2 :(得分:1)
在非Windows平台上的类似情况下,我们有能力收集系统转储。获取整个系统的线程转储以进行异地分析。这使我们能够很容易地找到死锁。对于慢问题而不是停止单个转储是不够的。然后我们需要一系列转储,并祝你好运。
另一种相当混乱的技术是在应用程序中有足够的跟踪和足够细粒度的跟踪控制。然后打开一些跟踪并希望找出延迟发生的位置。
答案 3 :(得分:1)
我在地球另一端的安装中发现错误的经验显示了三种有用的技术:记录,记录和记录。
这些日志文件说客户发送给您的是什么?如果它们不够详细,请向它们发送记录更多的版本。使用二进制近似来处理错误。
答案 4 :(得分:1)
要知道进程挂起的位置,最好从该时刻的堆栈跟踪开始。
现在,由于您的程序是远程安装的,并且您无法访问它,因此您可以编写一个监视程序,该程序可以定期检查程序堆栈并进行记录。此信息以及您的日志记录机制将使事情更容易识别和调试。
由于我不是Windows程序员,我对Windows中的这些工具可用性了解不多,但我认为你需要类似于http://www.codeproject.com/KB/threads/StackWalker.aspx
的东西