我为一些行政部门工作。我们负责应用程序开发,我个人负责软件应用程序服务器 (Glassfish),还有一个团队负责管理基础设施(网络、负载平衡器、Oracle 数据库、物理服务器(x86 机器上的 Solaris))。
现在,有时,事情会出错,我们的应用程序会停止工作。每当出现问题时,我都会尝试进行大量跟踪:
- 从运行应用服务器的 jvm:jstack -l
- 从系统:prstat、pstack、vmstat、netstat
但是,正如在生产中经常发生的那样,我没有太多时间,必须尽快恢复服务器。
现在,一些不常用的演示服务器崩溃了(今天早上看到的,可能是几天前)。它似乎与我们无法解释的应用程序崩溃有相同的症状:
- 应用服务器似乎在等待某些东西(在生产中,它似乎与某些数据库连接有关)
- dba 在数据库端看不到任何东西
- CPU 水平保持较低,其他东西正常运行(Web 管理控制台,...)
oracle db 连接使用 ldap 查找。在我们的演示服务器上,它似乎卡在等待 ldap 连接执行某些操作。网络团队在另一端看不到任何连接。现在,在 netstat 中(从我是 root 的区域),我肯定可以看到连接已建立。
我的问题是:连接如何才能建立,停留在那里,等待某事,以及为什么他们无法从另一端看到任何东西。
我猜测,如果这种情况可能发生在 ldap 连接中,那么它可能发生在任何事情上(db 连接,...)。
服务器仍处于这种状态,因此我可以在一段时间内(不会太长)对其进行实验(并提供更多数据)。
答案1
这只是一个猜测,但事实如下:
如果 LDAP 连接是连接到 Windows 服务器(例如从 AD 检索信息),那么它可能正在等待密码。Windows AD 不允许匿名 LDAP 查询,因此必须提供用户名和密码。客户端可能配置错误,正在等待用户提供密码。如果是这种情况,那么实际的 LDAP 连接可能已超时(这就是为什么另一端的人看不到任何东西的原因)。据我所知,LDAP 连接到 Windows AD 的默认超时时间并不是那么长,只有几分钟。