IT袋

当前位置:主页 > 经验教程 > 建站编程 >

502错误是什么、应该怎么排查

502错误是什么、应该怎么排查?(4)

时间:2024-03-20 15:00:39 来源:IT袋 作者:马勇
导读:502错误是什么、应该怎么排查,报错堆栈 不打印堆栈的情况 但有一些情况,有时候根本 不留下堆栈 。 比如内存泄露导致进程占用内存越来越多,最后导致超过服务器的最大内存限制,

502错误是什么、应该怎么排查

502错误是什么、应该怎么排查

报错堆栈

不打印堆栈的情况

但有一些情况,有时候根本不留下堆栈

比如内存泄露导致进程占用内存越来越多,最后导致超过服务器的最大内存限制,触发OOM(out of memory), 进程直接就被操作系统kill掉。

还有更隐蔽的,代码逻辑里隐藏了主动退出进程的操作。比如golang的日志打印里有个方法叫log.Fatalln(),打印完日志还会顺便执行os.Exit()直接退出进程,对源码不了解的新手很容易犯这个错。

502错误是什么、应该怎么排查

打印完顺便还退出进程

如果你很明确,你的服务没有崩过。那继续往下看。

网关将请求打到了一个不存在的IP上

nginx是通过配置的形式来代理多个服务器。这个配置一般是放在/etc/nginx/nginx.conf中。

打开它,你可能会看到类似下面这样的信息。

upstream xiaobaidebug.top {
    server 10.14.12.19:9235 weight=2;
    server 10.14.16.13:8145 weight=5;
    server 10.14.12.133:9702 weight=8;
    server 10.14.11.15:7035 weight=10;
}

上面配置的含义是,如果客户端访问xiaobaidebug.top域名,nginx就会将客户端的请求转发到下面的4个服务器ip上,ip边上还有个weight权重,权重越高,被转发到的次数就越多。

可以看出,nginx具有相当丰富的配置能力。但要注意的是,这些个文件是需要自己手动配置的。对于服务器少,且不怎么变化的情况,这当然没问题。

但现在已经是云原生时代了,很多公司内部都有自己的云产品,服务自然也会上云。一般来说每次更新服务,都可能会将服务部署到一台新的机器上。而这个ip也会随着改变,难道每发布一次服务,都需要手动去nginx上改配置吗?这显然不现实。

如果能在服务启动时,让服务主动将自己的ip告诉nginx,然后nginx自己生成这样的一个配置并重新加载,那事情就简单多了。

为了实现这样一个服务注册的功能,不少公司都会基于nginx进行二次开发。

但如果这个服务注册功能有问题,比方说服务启动后,新服务没注册上,但老服务已经被销毁了。

这时候nginx还将请求打到老服务的IP上,由于老服务所在的机器已经没有这个服务了,所以服务器内核就会响应RST,nginx收到RST后回复502给客户端

502错误是什么、应该怎么排查

实例已经销毁但配置没删IP

要排查这种问题也不难。

这个时候,你可以看下nginx侧是否有打印相关的日志,看下转发的IP端口是否符合预期。

如果不符合预期,可以去找找做这个基础组件的同事,进行一波友好的交流

总结

  • HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。
  • 客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。
  • 后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
  • 如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。

以上就是IT袋网带来的502错误是什么、应该怎么排查?的全部内容,您了解了吗?

相关阅读

  • kafka是什么 主要特点有哪些?

    kafka是什么 主要特点有哪些?

    IT袋网网为你介绍kafka是什么的IT知识,一定能解决您的问题的,一起来了解吧! Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩

  • access数据库入门教程 数据库零基础入门教学

    access数据库入门教程 数据库零基础入门教学

    今天小编详解access数据库入门教程和数据库零基础入门教学的相关介绍,继续往下看吧! Access数据库除了选择查询,还有操作查询,它们有: 更新查询 生成表查询 追加查询 删除查询 来看看

  • c语言怎么输出语句 C#中怎样快速输出{get;set;}

    c语言怎么输出语句 C#中怎样快速输出{get;set;}

    对于c#初学者来说,可能是受教程的影响,看到老师在Visual Studio中瞬间就可以快速敲出{get;set;},但是自己却不知道怎么敲?老师也不告诉,其实老师这样做是有目的的,让你自己多动手去熟悉

  • 使用双异步后 如何保证数据一致性?

    使用双异步后 如何保证数据一致性?

    小编为大家说一说使用双异步后的相关知识,下面小编为您详细解答 很简单,通过对比Excel文件行数和入库数量是否相等即可。 那么,如何获取异步线程的返回值呢? 一、通过Future获取异步返