0

我们有一个进程(用 c++ /managed 编写),它通过 tcpip 接收网络数据。在跟踪网络负载的同时运行该进程一段时间后,似乎网络进入冻结状态并且该进程没有获取数据,系统中还有其他进程使用正常运行的网络(相同的网卡)。几分钟后,该过程会自行摆脱这种冻结状态。

知道发生了什么吗?我可以跟踪任何计数器以查看我的流程是否达到某些限制?

4

1 回答 1

0

很难具体回答——不知道你的流程/应用程序到底是什么,

-- 无论是网络聊天应用程序,还是文件服务器/客户端,还是......

- 没有关于您的流程如何实现的其他详细信息,它使用哪些库,如果与问题相关。

此外,您还没有提到您在什么操作系统和环境下运行此过程,几乎没有人可以提供帮助。它可能是任何东西,你的代码中的一个繁忙的等待循环,如果它是一个多线程代码,则锁定问题,......尽管如此,这里有一些检查选项:

如果它的 linux 尝试下面的命令来调试和监控进程的行为,看看可能有什么问题-

  1. 顶部 检查顶部以查看您的进程正在使用多少资源(CPU、内存),以及它的 CPU 使用率是否有任何异常高的值。

  2. pstack 这应该堆栈问题发生时正在执行的进程的帧。

  3. netstat 使用必要的选项(tcp/udp)运行它来检查你的进程打开的网络套接字的状态是什么

  4. gcore -s -c 这会在上述问题发生时强制您的进程核心,然后使用 gdb gdb 分析该核心文件,然后在 gdb 提示符下使用命令 where 获取进程的完整回溯(它最后执行的函数和以前的函数调用。

于 2013-08-04T13:12:38.380 回答