web 常见报错处理

时间:2024-04-12 14:45:21

1、iptables防火墙设置的问题

导致服务不可达,或者网络异常(案例:常见设置中,都是防护墙在input或者output规则中设置异常。导致请求访问异常,或者出口请求访问异常)。

2、在高并发场景下。

如若内核未调优,可能会导致服务器没办法接受大规模的tcp连接请求,导致对应异常(如丢包)。我们要核心查以下日志确认(确定是不是有内核报错):

/var/log/message

如下案例中的异常都可能导致内核丢包,从而出现访问网站卡的问题:

案例1:tcp的TIME_WAIT超过默认值(5000):

web 常见报错处理

案例2:tcp socket 用尽了给他分配的内存:

web 常见报错处理

3、最常见之二的是系统访问压力较大,导致访问网站较卡,常见的情况如下:

  • 处理的进程数很高,导致CPU负载很高,导致服务器卡死。
  • 内存使用很高,导致异常。
  • IO很高,导致CPU负载很高,导致服务器卡死。
  • 网卡流量很高,导致访问网卡很高。

4、WEB服务器层

网络层、、操作系统层确认没问题的话,通过数据包走向,下阶段会流入web服务器层(如nginx、apache、iis等)。web服务器层的性能问题或者异常,也会直接导致访问网站卡。常见案例如下:

  • nginx的性能问题,nginx作为反向代理(一般用来转发请求),基本上没遇到过是因为nginx的性能问题导致网站访问卡的案例。
  • Apache的性能问题,很常见,一般是Apache在进程等方面分配不足,导致请求过来没办法响应。(案例:某网站访问首页很卡,调整最大请求数量上限:MaxClients(apche2.2版本)/MaxRequestWorkers(apache2.4版本),调整后访问恢复正常)。

5、代码层

网络层、操作系统层、WEB服务器层确认没问题的话,通过数据包走向,下阶段会流入代码层(如Java、php等)。代码层的异常(如死循环、空指针异常、内存溢出等),也会直接导致访问网站卡。

首先,我们确认业务代码的状态(核心需要查看程序日志,看看有没有对应error明细):

  • Java的代码异常,一般都是部署在tomcat的应用,确认tomcat日志及程序日志。
  • php的代码异常,确认php日志及程序日志。

php中确保log_errors有开启,保障错误信息记录在日志里,方便排查及定位问题。

其次,我们确认代码在系统的状态:

  • 确认代码文件的权限,有可能文件权限异常,导致程序运行异常,最终出现访问异常。
  • 确认代码服务端口运行正常,没有进程僵尸等状况。

6、数据库层

网络层、操作系统层、WEB服务器层、代码层确认没问题的话,通过数据包走向,下阶段会流入数据库层。数据库的性能问题或者异常,也会直接导致访问网站卡。通过二八原理,我们发现数据库的性能问题主要集中在:

  • 80%的数据库性能问题都出在sql语句上
  • 80%sql的语句问题,都是索引的问题

常见案例如下:

1、由于慢sql导致网站访问卡的案例

2、由于数据库配置、参数等方面问题或者异常导致网站访问卡的案例

  • 服务器性能配置:CPU、磁盘IO、内存方面。
  • 数据库性能配置:数据库连接数、缓存大小配置等方面。

7、经典案例:

访问网站出现:502/503/504/500/403/400/404

502

502错误:打开页面显示的是502 bad gateway(错误网管)的信息。原因一般是PHP执行得太久而超过了参数request_terminate_timeout和max_execution_time所设定的时间,导致FPM终止了PHP工作进程,无法为fastcgi接口返回信息。如果PHP的错误日志出现了SIGxxxx,那就有可能会出现这个现象。而罪魁祸首很可能是后端存储或调用外部链接反应太慢,或者挂了,导致PHP一直等待,达到了自行了断的条件。

502错误的一般处理方案:如果是执行超时时间配置不合理,则需要延长超时时间。另一种处理方法是从后端入手,找到关键的瓶颈点,比如分析数据库的慢查询、死锁、负载,执行中的SQL等,strace是个发现PHP连接后端超时的好方法。

503

503错误:伴随503错误出现的描述一般是整个服务临时不可用(Service temply Unavailable),这种错误一般是Web服务器(如Nginx)这一层端口还活着,但无法响应用户的请求。

503错误的一般处理方法:应该重点分析机器负载,Nginx进程是否存活,端口是否存活,Nginx进程的工作饱和度,如果以上都正常则应该参照7.4节所讲的方法分析Nginx状态。

504

504错误:504错误表示网关超时(gateway timeout),可能是请求量突发,导致PHP负载太高,无法为请求分配工作进程,或者达到了连接数限制、某些组件达到性能瓶颈了,导致系统可用性明显下降;影响504错误的Nginx超时设置fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout。

504错误的一般处理方法:还是从PHP层进行分析,如果每个请求的处理时间都是正常的,那么就是整个PHP层的资源不够用了,需要扩容;如果是某些请求的时间太长,那么就得找到性能瓶颈点了。

500

500错误:表示代码运行错误,及相应error。

500处理的一般处理方法:找研发协助解决。相应的报错都是英文,可以尝试搜一下相应异常代码。相应文件权限、数据库连接异常等,可以先自行排查解决。

403

403错误:nginx的403 Forbidden errors表示你在请求一个资源文件但是nginx不允许你查看。此问题最常见的原因,一般是权限配置不正确。

403处理的一般处理方法:

  • 1.网站禁止特定的用户访问所有内容,例:网站屏蔽某个ip访问,如设置了allow/deny。
  • 2.访问禁止目录浏览的目录,例:设置auto index off后访问目录。
  • 3.用户访问只能被内网访问的文件。

400

400错误:表示bad request,即错误的客户端请求,即服务器端无法理解客户端的请求是什么。

400处理的一般处理方法:

  • 1.最简单原因断网(DNS解析不到域名);
  • 2.常见原因是request header设置过大,如确认client_header_buffer_size、。large_client_header_buffers设置的大小;
  • 3.WEB服务器异常、服务的模块不可用(例如nginx、php模块)、端口不通、进程僵死等。

404

404错误:表示页面不存在,静态页面或PHP文件被删除。

404处理的一般处理方法:找研发确认。