我们的 CentOS LAMP 服务器上出现了一些奇怪的问题,尽管当时服务器的负载相对较低,但服务偶尔会出现严重的 4-30 秒延迟。是否有任何工具可以从 DNS 解析开始单独分析请求每个部分的延迟?
有人有任何关于解决此问题的提示或建议吗?我们不是这方面的专家。我猜如果服务器没有超载,那一定是 DNS、apache/vhost,对吗?
答案1
如果您怀疑存在 DNS 问题,请免费 Grafana 云帐户,设置 Grafana 实例,配置“合成监控”并使用来自不同位置的 HTTP 检查,等待几分钟,获取性能指标:
在这种情况下,解析主机名需要 10.1ms,建立 tcp 连接需要 31.5ms,tls 握手需要 49.1ms,服务器生成响应需要 34.8ms,通过网络获取响应主体需要 159 微秒。
如果你手头有docker,那么prometheusblackbox_exporter基本上做同样的工作,即使是在你的私人网络内部:
docker run -d --rm -p 9115:9115 prom/blackbox-exporter
watch "curl -s 'localhost:9115/probe?target=yourwebsite.com&module=http_2xx' | grep probe_http_duration_seconds"
它应该生成如下输出:
# HELP probe_http_duration_seconds Duration of http request by phase, summed over all redirects
# TYPE probe_http_duration_seconds gauge
probe_http_duration_seconds{phase="connect"} 0.046065283
probe_http_duration_seconds{phase="processing"} 0.051462184
probe_http_duration_seconds{phase="resolve"} 0.0028130639999999997
probe_http_duration_seconds{phase="tls"} 0.051232243999999996
probe_http_duration_seconds{phase="transfer"} 0.000227759
我建议花一些时间来了解 Grafana 和 Prometheus,因为它们是功能强大的工具,文档齐全,并且互联网上有很多示例、指南和现成的仪表板。您甚至可以获取有关 Web 服务器(apache_exporter)、主机(node_exporter)和数据库(mysqld_exporter)的详细指标,以了解全貌并找到瓶颈。