2011-06-15 117 views
0

我们正在开发车辆跟踪系统。像每个VTS一样,我们将GPS设备安装到车辆中,并且这些设备将车辆位置详细信息发送到服务器。我们开发了一个TCP通信器,它可以继续运行并检查特定端口是否有任何连接请求。如果有的话,它为该设备创建一个线程,该线程保存所有的设备位置细节。 TCP通信器按预期运行12到16个小时。但是在12-16小时后,它停止响应。日志中没有错误或异常。甚至还有pid文件也存在,所以进程没有被杀死。什么是可能的问题,我应该如何去调试这个问题?TCP通信器在一段时间后停止工作

在此先感谢

+2

您需要确定设备,网络连接或应用程序是否已停止工作。我建议你在整个网络中使用心跳,并定期(即使几分钟)记录你的应用程序,即使它没有做任何事情说它活着) – 2011-06-15 05:32:56

+0

你可以提供一些关于“没有响应”的意思吗?连接到端口是否会出现“连接被拒绝”错误,或者连接到端口但没有响应输入?你有没有尝试使用类似telnet连接到端口来检查是否有任何东西在听? – 2011-06-15 05:37:53

+1

也跟踪内存/ CPU利用率。也许服务器应用程序在完成执行后没有正确地清理线程。日志数据越多越好。 – 2011-06-15 05:40:47

回答

0

我相信你不关闭连接,流或类似的东西。你提到PID文件,所以我猜你正在Linux上运行。 Linux每次获得网络连接或打开文件或创建进程时都会创建处理程序。处理程序的数量是有限的。不幸的是,我不记得shell的命令,但我记得那个可以显示所有处理程序的命令存在。

所以,我建议你执行以下操作。我相信你的系统会定期更新细节。让我们说每一分钟。因此,请让系统每秒执行一次(如果您需要,则每秒执行100次)。我相信它会卡住得更快。现在减少这段时间,并看到它会在你提到的16小时后继续工作。如果这将是我对处理程序的假设是正确的。因此,请尝试查看您的代码,并看到每次打开输入/输出流时,都会将其正确关闭到,最后是。可能在创建和关闭流后添加日志记录。

祝你好运!

相关问题