如何排查网站出现502的问题?
网站出现502问题时的排查思路如下:
1、重点检查最常访问的页面,有没有页面输出缓存。如果没有,基本上就是这个原因引起的。继续检查几个地方:
1)后台“运维中心--平台参数配置”这里是否关闭了页面输出缓存功能。假如全站没有页面输出缓存,一般就是这里的原因。
2)节点的参数中是否禁用了页面输出缓存。如果只是个别节点的页面没有页面输出缓存,一般就是这里的原因。
3)检查HTML代码中是否有名为“__RequestVerificationToken”的隐藏字段,这个是防CSRF攻击功能输出的代码,有这个,就不会有页面输出缓存。而输出这个的主要原因是在布局页的源代码中有“@Html.AntiForgeryToken()”这行代码;4.0之前的版本在‘用户登录弹出窗’公版标签中,需要删除@Html.AntiForgeryToken()。
4)浏览器中F12在头部中查到有一个参数IPLimitType,代表设置了IP访问限定
检查平台、站点、节点、内容的IP访问限定,需要去掉IP访问限定。
(在SiteAzure3.3.2及以前版本中,对于设置了IP访问限定、用户访问权限、文章签收专属文档时,站点首页的页面执行时间大约为1秒左右,栏目列表页和内容页的页面执行时间大约为150毫秒左右。这是因为:如果设置了IP访问限定、用户访问权限、文章签收专属文档,系统就简单的改成不使用页面输出缓存,而是走完整的页面解析过程,并在页面解析过程中进行权限判断,如果没有权限则显示提示信息。)
5)如上述检查无误,某个节点或者内容页还是无法生成缓存,可以查看系统错误日志;
页面模板中的某个标签解析报错,虽然整个页面是正常的,但不会生成缓存文件。
2、检查在有缓存时页面的执行时间是否正常。SiteAzure的正常值应该是15毫秒左右,大部分应该是低于15毫秒。WebFuture 的正常值应该是1毫秒或者几毫秒(5毫秒以内)。如果达到上百毫秒甚至几百毫秒,可能是因为没有启用定时任务而导致的。如果关闭CC攻击防护,页面执行时间就正常了,那就可以确定是这个原因。因为系统需要定时清理掉CC攻击防护模块的访问记录表PE_AttackDefense_IpRequestRecord中的记录,假如没有定时任务,这个表中的记录就会越积越多,到了过百万条以后,就会严重影响CC攻击防护的性能。因为每个请求都要经过CC攻击防护模块的检查,所以就会导致网站的负载能力极限下降,遇到一点高并发就会出现502了。但SiteAzure 4.x 和 WebFuture 11.x 应该是没有这个问题了,因为改用了内存来处理。
3、检查没有页面输出缓存时,页面的执行时间是否正常(首页为1秒左右,列表页为100毫秒~200毫秒,内容页在100毫秒左右)。如果不正常,就可能会有慢查询。页面中的每个列表的正常解析时间应该在80毫秒左右,列表越多,页面执行时间就越长。所以如果首页调用的列表非常多,那页面执行时间要好几秒也是正常的。但列表页假如只有一个列表,也要几百毫秒甚至1秒多,那肯定是有问题(一般是慢查询)。而慢查询的原因一般是相关字段没有索引,或者MySQL数据库的IN查询等使用全表扫描引起的。
4、如果是有与第三方对接的接口,检查一下相关的接收日志表之类的地方。看看数据量是否过多。如果数据量比较多(比如过10万),而又有“排重”之类的设计,那也可能会是一个性能黑点。所以需要清理掉无用的旧记录。并且检查用于“排重”字段有没有索引。