不知道这个问题是否属于 unix.stackechange/stackoverflow/devops.stackexchange。
我在这里打开它是因为我认为它可能与 unix/linux 相关。
我们有一个自定义的 java/springboot api,在 ubuntu 上的 docker 容器中运行,位于 WSO2 Apimanager 后面,它将 Active Directory 查询包装到 REST 调用中。
我们看到,约 1% 的请求确实非常慢(约 130 或约 260 秒是慢请求)。我们看到的一点是,如果它是一个缓慢的请求,则每次需要约 130 或约 260 秒,发生这种情况时的日志语句如下所示:
2021-05-11 14:56:55.114 5b86b59d-d4bf-447b-96fc-9256af8b6113;activemq-loginmodule; INFO 8 --- [nio-8080-exec-2] at.<redacted>.commons.service.LoggingFilter : method=GET, uri="/aduser/<ad-user>/roles?filters=api-*%2Cmq-*", response_status=200, remote_address=10.0.0.11, response_time_ms=130141, request_body="[empty]", header_x_forwarded_host="wso2-apimanager.domain.com", header_x_forwarded_proto="https", header_x_forwarded_port="443", header_x_forwarded_for="10.10.0.20", header_x_<redacted>_requestid="5b86b59d-d4bf-447b-96fc-9256af8b6113;activemq-loginmodule;", header_accept="application/json", header_host="ad-api.domain.com:8080", header_connection="Keep-Alive", header_user_agent="Synapse-PT-HttpComponents-NIO", cookies=[empty], response_body="[empty]"
我们在域控制器上启用了 ldap 查询的慢查询日志,该日志与我们的 spring boot api 进行通信,我们看到活动目录正在快速回答查询(最慢的查询大约 2-3 秒)。
然后,我们在带有 API 的 ubuntu 主机上使用 tcpdump 进行了深入研究,发现了以下内容:
AD域控制器:10.xx.xx.79
托管我们的 springboot api 的 Linux 服务器:10.xx.xx.97
sow不知何故看起来像我们的linux系统托管我们的spring boot api或我们的springboot api本身,在极少数情况下不会将取消绑定请求发送到我们的ad ldap,因此api调用会挂起,直到2或4分钟后我们的服务器才会取消绑定。
真正奇怪的是,我们看到这种情况发生了 7 天,我们的 springboot api 自 3 个月以来没有改变,所以当这种情况开始发生时,我们没有改变 api 方面的任何内容。
为什么会出现这种情况?我们怎样才能找出为什么会发生这种情况?我们如何才能更深入地挖掘它?