如何排查Node.js中TLS握手缓慢的问题?
TLS握手延迟问题排查求助
近期系统新增大量用户,带宽使用及TLS握手后的服务器响应均处于正常范围,但TLS握手耗时可达1-2.5秒,其中客户端问候(Client Hello)与服务器问候(Server Hello)之间的延迟尤为明显,以下是耗时1.5秒的日志片段:
13:01:49.599739 * TLSv1.3 (OUT), TLS handshake, Client hello (1): 13:01:51.023274 * TLSv1.3 (IN), TLS handshake, Server hello (2):
我们的运行环境是Node.js 16搭配greenlock-express,个人认为express或greenlock与握手延迟无关。
发现重启pm2进程后,握手速度会暂时恢复正常,日志如下:
13:20:24.977793 * TLSv1.3 (OUT), TLS handshake, Client hello (1): 13:20:25.063494 * TLSv1.3 (IN), TLS handshake, Server hello (2):
除了Client Hello到Server Hello之间的延迟,整体请求日志的其他环节均运行顺畅,完整curl请求日志如下:
:~$ curl -iv --trace-time https://{server name} 13:01:49.496453 * Rebuilt URL to: https://{server name}/ 13:01:49.500927 * Trying 54.73.36.16... 13:01:49.500970 * TCP_NODELAY set 13:01:49.583976 * Connected to {server name} (54.73.36.16) port 443 (#0) 13:01:49.585712 * ALPN, offering h2 13:01:49.585791 * ALPN, offering http/1.1 13:01:49.599251 * successfully set certificate verify locations: 13:01:49.599324 * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs 13:01:49.599739 * TLSv1.3 (OUT), TLS handshake, Client hello (1): 13:01:51.023274 * TLSv1.3 (IN), TLS handshake, Server hello (2): 13:01:51.023566 * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): 13:01:51.023602 * TLSv1.3 (IN), TLS handshake, Unknown (8): 13:01:51.023679 * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): 13:01:51.023764 * TLSv1.3 (IN), TLS handshake, Certificate (11): 13:01:51.024257 * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): 13:01:51.024312 * TLSv1.3 (IN), TLS handshake, CERT verify (15): 13:01:51.024439 * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): 13:01:51.024504 * TLSv1.3 (IN), TLS handshake, Finished (20): 13:01:51.024599 * TLSv1.3 (OUT), TLS change cipher, Client hello (1): 13:01:51.024708 * TLSv1.3 (OUT), TLS Unknown, Certificate Status (22): 13:01:51.024785 * TLSv1.3 (OUT), TLS handshake, Finished (20): 13:01:51.024902 * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 13:01:51.024957 * ALPN, server accepted to use http/1.1 13:01:51.025023 * Server certificate: 13:01:51.025089 * subject: CN={server name} 13:01:51.025143 * start date: Oct 10 07:55:03 2022 GMT 13:01:51.025205 * expire date: Jan 8 07:55:02 2023 GMT 13:01:51.025273 * subjectAltName: host "{server name}" matched cert's "{server name}" 13:01:51.025341 * issuer: C=US; O=Let's Encrypt; CN=R3 13:01:51.025402 * SSL certificate verify ok. 13:01:51.025490 * TLSv1.3 (OUT), TLS Unknown, Unknown (23): 13:01:51.025584 > GET / HTTP/1.1 13:01:51.025584 > Host: {server name} 13:01:51.025584 > User-Agent: curl/7.58.0 13:01:51.025584 > Accept: */* 13:01:51.025584 > 13:01:51.139620 * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): 13:01:51.139776 * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): 13:01:51.139981 * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): 13:01:51.140130 * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): 13:01:51.221629 * TLSv1.3 (IN), TLS Unknown, Unknown (23): 13:01:51.221752 < HTTP/1.1 200 OK HTTP/1.1 200 OK 13:01:51.221934 < X-Powered-By: Express X-Powered-By: Express 13:01:51.222112 < Vary: Origin Vary: Origin 13:01:51.222265 < Accept-Ranges: bytes Accept-Ranges: bytes 13:01:51.222428 < Cache-Control: public, max-age=0 Cache-Control: public, max-age=0 13:01:51.222564 < Last-Modified: Sun, 13 Nov 2022 13:14:39 GMT Last-Modified: Sun, 13 Nov 2022 13:14:39 GMT 13:01:51.222687 < ETag: W/"403-1847120b218" ETag: W/"403-1847120b218" 13:01:51.222811 < Content-Type: text/html; charset=UTF-8 Content-Type: text/html; charset=UTF-8 13:01:51.222946 < Content-Length: 1027 Content-Length: 1027 13:01:51.223068 < Set-Cookie: connect.sid=s%3AD0KBzxmVDIb8vYcBmtdTZ6bvRF17NT1Q.1c6pkFHEoNWHl%2F4OT6bqMkm1csE; Path=/; HttpOnly Set-Cookie: connect.sid=s%3AD0KBzxmVDIb8vYcBmtdTZ6bvRF17NT1Q.1c6pkFHEoNWbqMkm1csE; Path=/; HttpOnly 13:01:51.223192 < Date: Tue, 22 Nov 2022 11:01:50 GMT Date: Tue, 22 Nov 2022 11:01:50 GMT 13:01:51.223316 < Connection: keep-alive Connection: keep-alive 13:01:51.223439 < Keep-Alive: timeout=5 Keep-Alive: timeout=5 13:01:51.223567 < <!doctype html>
请问该如何定位TLS握手缓慢的原因?
内容的提问来源于stack exchange,提问作者Hillel Millman
相关产品推荐
相关产品推荐

