首页 > 代码库 > 服务器故障处理

服务器故障处理

机房公网网站流量出口达到上限,核心站点已经出现访问缓慢、无法加载的现象

1.扩充流量

2.换机房,改变后端Web集群访问地址,将一部分中等流量的站点服务器上的Nginx配置分发到B机房服务器,随后更改DNS解析

有一套能实时查看所有域名流量,通过纵向(每台服务器流量多少,当前HTTP并发多少)、横向(每个服务器上运行了多少个域名、每个域名流量多少、域名访问来源是什么)做可视化展示的系统,监控Nginx主机上正在使用的域名、单机总流量、并发、单个域名流量等。

注意事项:

不碰核心站点,重要性不言而喻;

不碰小流量站点,因为迁移访问量较小的站点需要迁移多个站点才能有冗余流量,明显耽误时间。


系统出现故障时

  • 有谁在?别几个人一起调试

#w

#last

  • 之前发生了什么?

#history

  • 现在在运行的进程是啥?

#pstree -a

#ps -aux

  • 监听的网络服务

    $ netstat -ntlp
    $ netstat -nulp

    $ netstat -nxlp

    一般都分开运行这三个命令,不想一下子看到列出一大堆所有的服务

    如果要显示所有存在的连接,netstat 会比较慢, 你可以先用 ss 看一下总体情况

  • CPU 和内存

    $ free -m
    $ uptime
    $ top

    $ htop

  • 还有剩余的CPU吗? 服务器是几核的? 是否有某些CPU核负载过多了?

  • 服务器最大的负载来自什么地方? 平均负载是多少?

  • IO 性能

    $ iostat -kx 2
    $ vmstat 2 10
    $ mpstat 2 10

    $ dstat --top-io --top-bio,用它可以看到谁在进行 IO

  • 检查磁盘使用量:服务器硬盘是否已满?

  • 是否开启了swap交换模式 (si/so)?

  • CPU被谁占用:系统进程? 用户进程? 虚拟机?


应用故障

  • Apache & Nginx; 查找访问和错误日志, 直接找 5xx 错误, 再看看是否有 limit_zone 错误。

  • MySQL; 在mysql.log找错误消息,看看有没有结构损坏的表, 是否有innodb修复进程在运行,是否有disk/index/query 问题.

  • PHP-FPM; 如果设定了 php-slow 日志, 直接找错误信息 (php, mysql, memcache, …),如果没设定,赶紧设定。

  • Varnish; 在varnishlog 和 varnishstat 里, 检查 hit/miss比. 看看配置信息里是否遗漏了什么规则,使最终用户可以直接攻击你的后端?

  • HA-Proxy; 后端的状况如何?健康状况检查是否成功?是前端还是后端的队列大小达到最大值了?



  1. 永远不要对当前连接的服务器或者网络设备接口进行修改

  2. 请务必为自己的操作准备一套恢复机制

  3. 利用工具对网络设备配置进行自动化备份能在交换机无法工作时帮助大家在几分钟内部署好替代方案

  4. 在进行修改前对每个配置文件做好备份(.bak)

  5. 认真监控数据中心的每个方面,从室内温度开始、到机架、再到服务器--另外,服务器进程检查、正常运行时间检查等等,并通过趋势及图形工具监控带宽使用率、温度、磁盘分区用量以及其它重要数据指标。

服务器故障处理