关于500错误,我踩了这些坑

湖蓝几何球体LinkedIn Banner.png

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


作为一个运维,掐指一算,我觉得你肯定遇到过服务出现500的错误的情况。
因为我也遇到过好多次。

在 HTTP 协议中,500 Internal Server Error 是表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。

不怕丢人的说,关于500错误,我踩过这么些坑。

1. 数据库异常:

1.1 数据库应用 or 数据库服务器挂了,连不上数据库。

1.2 配置文件关于数据库的配置不正确,连不上数据库。

1.3 数据库主从数据不一致。
数据库服务、配置文件、swagger获取数据库数据全都正常,但错误日志却提示某些表不存在。检查数据库,发现主从数据库的数据不一致,一台负责读数据的从库少了一些数据。当数据库主从数据不一致且主从同步数据有异常的时候,若应用正好连上问题数据库,那么就会出现页面上有些数据显示不出来,服务报500的情况;

1.4 某次新搭建的环境报500错误,发现是数据库的初始化数据有异常;

1.5 数据库的磁盘空间满了,这种情况下,服务不一定会报500,但是页面上数据会加载不出来;

题外话:
还遇到过一种数据库异常:
有一个用户鉴权的应用新版本发布完了之后,发现所有的用户都没权限操作了。
应用后台日志提示该鉴权应用配置的数据库用户没权限连接数据库。
然后再找DBA查看这个数据库的用户权限,发现鉴权应用专用的数据库用户和密码被干掉了(另一次是用户没有删,突然就没权限了)!
最后DBA重新创建这个用户,重新授权,就OK了。

2. 域名解析异常

2.1 应用的域名丢失,无法调用。
有一次遇上后端应用A报了500错误,查看了应用的进程、配置、数据库应用,一切都正常。用应用A所在服务器IP+端口访问后台swagger,也能够完整的获取到数据。但是用应用A对应的域名去访问swagger的时候,发现swagger页面却无法打开。经过排查域名,发现A应用的域名丢失了,而前端调用A应用是通过域名调用的,因此出现了报500的情况。

2.2 域名无法解析。
某次发现应用A的页面上出现了应用B报500的错误,A、B应用之间的调用是通过域名调用。经过核对排查,发现因为两台服务器之间的区域、网络原因,需要在A应用服务器的/etc/hosts里面单独配置B应用的域名解析(如:10.0.0.0 www.baidu.com )才能正确解析到。于是加上解析之后,服务就不再报500了。

3. logout的 URL配置问题,导致网站的退出登录时,页面出现500

有一次是在网站的首页点击“退出登录”,遇到了500。
网站在正常情况下点击“Logout”之后,就应该跳转到最初的登录界面。但是这次点击“Logout”退出登录之后,界面跳出来了一串500的报错。
于是查看tomcat下应用里面的inputs参数,检查Logout这里对应的URL链接地址,发现URL链接配置有误。换成正确的地址之后,500错误解决。

4. memcached异常,网站登录页面报500

网站的前端是有加了memcached的,在登录页面输入用户名和密码登录,进去之后发现不是网站的首页,而是报了一大段500的报错信息,包括“time out”等字眼。其中,注意到了报错里面有出现两台memcached的IP地址。
于是查看memcached应用,确认是memcached应用异常引起的。

5. Haproxy的VIP异常

项目采用的微服务架构,每个微服务都是双节点,采用HA做负载。
有一次页面上出现了500的错误,影响了业务的正常功能。但是以上5点原因都排查过,均是正常的。
最后查看HA,发现是后台HA服务绑定的VIP挂了,因此引起了服务报500。将VIP处理好,问题得到解决。

目前为止,关于500错误,大致就踩了这么些坑。那么,你还遇到过哪些情况呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值