有时候遇上服务报500,特别是后台服务会经常出现,500错误是内部服务器错误。遇上错误首先想到的肯定是先看看服务的进程还在不在,然后查看日志,从日志里面找原因。
根据工作中所爬过的坑,小结一下,可以从下面的方向进行排查:
1、数据库异常:
1)检查数据库服务器,是否能够正常连得上,数据库机器是否挂了;
2)检查服务上的数据库相关的配置,是否正确;
3)检查swagger,看swagger页面是否能够正常访问,swagger里面的后台接口能否正常获取到数据库里面的数据;
4)如果数据库正常、配置正常,swagger也能获取到数据,而且查看日志的时候,发现日志报某些表不存在,但是登上某一台数据库,发现表是完整的。那么就需要检查一下所有的数据库机器里面的数据了。看看主从数据库里面的数据是否一致。如果数据不一致,且同步数据有问题,而服务正好连上问题数据库,那么就会出现页面上有些数据显示不出来,服务报500的情况;
5)如果是新搭建的环境,那就需要看看是否数据库没有进行数据的初始化了;
6)数据库的磁盘空间满了,这时候服务不一定会报500,但是页面上数据会加载不出来;
7)还遇到一种数据库异常就是,有一个鉴权的服务升级完了之后,发现所有的成员操作报没权限,但是服务是OK的。查看服务日志,日志报该服务配置的数据库用户没权限连接数据库。查看这个数据库的用户,发现这个库的用户和密码被谁删掉了(另一次是用户没有删,突然就没权限了),然后重新创建这个用户,重新授权,就OK了
2、域名异常
有一次遇上服务报500,查看了机器的后台进程,服务的配置、数据库,一切正常。而且使用IP+端口访问后台swagger,也能够完整的获取到数据。但是使用域名去访问swagger的时候,发现swagger页面已经无法打开,经过排查域名,发现该服务的域名丢失,而前台调该服务是通过域名调用的,因此出现了报500的情况。
3、/etc/hosts没有配置解析
有一次发现A服务的页面上创先了B服务报500,A服务是通过域名调用的B服务后台服务。经过核对排查,发现因为两台机器的大小网、网络等原因,需要在A服务的/etc/hosts里面单独配置B服务的解析,加上IP和域名(如:10.0.0.0 www.baidu.com)才能正确解析到。于是加上解析之后,服务就不再报500了。
4、logout的 URL配置问题,网站的退出登录时,页面直接500
在首页退出登录,本来应该是界面回到最初的登录界面,但是退出登录之后,界面直接就是一串500的报错。于是查看tomcat下应用里面的inputs参数,检查log out这里对应的URL链接地址。换成正确的地址之后,500错误解决
5、memcached异常,页面登录,报500
在前端是加了memcached的,在登录页面输入用户名和密码登录,进去之后发现不是网站的首页,而是页面直接就是500的报错信息,报错信息还写了time out等等,其中注意到报错里面有两个IP地址,经核实,正是memcached的IP地址,于是查看memcached服务,确认是memcached服务异常引起的。
6、Haproxy的VIP异常
服务为双节点,走的HA,一次页面上出现服务报500,影响了业务的正常功能。但是以上5点原因都排查过,均是正常的。最后查看HA,发现是后台HA服务的VIP挂了,因此引起了服务报500.将vip处理好,问题得到解决