【问题标题】:AIX Environment - TCP Port RecvQ data increasing but application not consumingAIX 环境 - TCP 端口 RecvQ 数据增加但应用程序不消耗
【发布时间】:2015-05-25 09:28:01
【问题描述】:

我是内核级设置或 TCP 编程的新手。所以请耐心回答一些基本的(有时是愚蠢的)问题。

我有一个场景,客户端应用程序通过 TCP 端口连接到我的服务器并发送消息。 我的服务器应用程序托管在 AIX envi(WAS 中的 java)中。我可以成功连接到服务器端口,但发送的消息没有被应用程序使用。

端口上的 Netstat -an 显示 recq 数据缓冲区大小增加。但应用程序代码没有被触发。

我假设调用等待该端口的进程的内核没有调用它。

请向我提供检查解决问题的建议。

【问题讨论】:

  • 你需要提供一些源代码。
  • 感谢您的回复。问题是我没有客户端应用程序。服务器端口是通过camel打开的tcp端点。该系统一直工作到几天前。在端口的当前情况下,我仍然看到一些处于已建立状态的连接,尽管 IP 不再存在。我怀疑可能在服务器中更改的防火墙设置。
  • 如果你不能提供源代码,这不是一个编程问题,因此是题外话。

标签: java sockets tcp aix


【解决方案1】:

什么级别的 AIX?

三年多前有一个错误导致选择被遗漏。这是特定于 pollset 的,但这可能是 Java 用于其选择的内容。虽然您遇到该错误的可能性很小,但应用程序无法正常运行的可能性要大得多。

如果您可以找到应该从套接字读取的线程,请对该线程进行内核跟踪。如果没有,请对整个过程进行内核跟踪。这可能会非常令人生畏,但这就是开始的地方。 Utopia 可能会在进程确定从套接字读取的线程时对进程进行内核跟踪。然后当问题发生时,对该线程进行内核跟踪。您可能会发现它被另一个线程锁定在它需要的资源之外,这会产生“为什么该线程被阻塞?”的问题。追逐已经开始了。

在名为 pdump 的公共 IBM FTP 服务器上还有一个脚本。您可以在非工作状态期间对进程运行 pdump 以获取每个线程的堆栈。特别是如果您知道应该从套接字读取哪些线程,这将有助于告诉您在问题发生时读取线程正在做什么。

lsof 可以帮助您确定套接字在哪个文件描述符上打开。这将帮助您阅读内核跟踪以及 pdump 信息。它不是“库存”AIX,而是在扩展包中。 fuser 可以做同样的事情,但我更相信 lsof。

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2016-01-28
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多