记一次504 Gateway Timeout处理过程

问题背景

服务器使用Nginx作为负载均衡,第三方先访问负载均衡地址,再转发到实际服务器

第三方访问时卡死,最后出现了504 Gateway Timeout(网关超时)

处理过程

1、排查Nginx网关

通过搜索发现,504问题出现的原因有:

  • 后端服务响应时间过长:服务器处理请求需要更多时间,超出了代理服务器的等待时间。
  • 网络延迟:网络不稳定导致数据传输中断。
  • 配置错误:代理服务器(如 Nginx、Apache)或负载均衡器的超时时间设置不当。
  • 服务器过载:后端服务器的资源不足,无法及时处理请求。

1.1 查看Nginx超时时间

通过nginx.conf文件,可以看到超时时间设置的很长,不应该是超时时间的问题。

http { 
    ...
    keepalive_timeout 6000;
    fastcgi_connect_timeout 600;
    fastcgi_send_timeout 600;
    fastcgi_read_timeout 600;
  
    proxy_connect_timeout 600s;
    proxy_send_timeout 1200;
    proxy_read_timeout 1200;
    ...
}
  • keepalive_timeout 6000; Nginx与客户端之间的连接保持活动的超时时间,单位是秒。

  • fastcgi_connect_timeout 600; Nginx与FastCGI服务器(如PHP-FPM)建立连接的超时时间。

  • fastcgi_send_timeout 600; Nginx向FastCGI服务器发送请求的超时时间。

  • fastcgi_read_timeout 600; Nginx从FastCGI服务器读取响应的超时时间。

  • proxy_connect_timeout 600s; Nginx与后端代理服务器建立连接的超时时间。

  • proxy_send_timeout 1200; Nginx向后端代理服务器发送请求的超时时间。

  • proxy_read_timeout 1200; Nginx从后端代理服务器读取响应的超时时间。

1.2 查看Nginx错误日志

日志文件通常位于/var/log/nginx/error.log,可以使用以下命令查看最新日志:

tail -f /var/log/nginx/error.log

拿到日志后发现是上游服务器的问题

2024/12/27 09:39:12 [error] 2273570#2273570: *29697090 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 客户端IP地址, server: Nginx服务器地址, request: "请求信息", upstream: "上游服务器信息", host: "请求被发送到的Nginx服务器的主机名和端口"

2、排查上游服务器

通过服务器日志发现,可能是锁表导致的,于是登录数据库查询锁表

2.1 查询锁表信息的SQL

查询被锁的表和相关信息

SELECT b.owner, b.object_name, a.session_id, a.locked_mode 
FROM v$locked_object a, dba_objects b 
WHERE b.object_id = a.object_id;
  • OWNER:数据表的所有者用户
  • OBJECT_NAME:被锁住的表名
  • SESSION_ID:会话ID
  • LOCKED_MODE:锁级别。

查看是哪个session引起的锁

SELECT a.OS_USER_NAME, c.owner, c.object_name, b.sid, b.serial#, logon_time
FROM v$locked_object a, v$session b, dba_objects c
WHERE a.session_id = b.sid
AND a.object_id = c.object_id
ORDER BY b.logon_time;

杀掉对应进程

ALTER SYSTEM KILL SESSION 'sid,serial#';

2.2 优化相关代码

至此,问题已解决

参考链接

504 Gateway Timeout:网关超时完美解决方法-腾讯云开发者社区-腾讯云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值