线上故障如何快速排查

前言

上线定位问题的思路很重要,先分析大致方向是哪出现的问题 内存、CPU、恶意攻击、使用的服务,包含 NGINX REDIS MYSQL PHP,最好搞一个监控系统用来实时监控 设置预警值 到达一定上限后 进行报警,技术人员及时跟进处理以规避此问题

一 服务器层面

主要分析几个方面 磁盘内存够不够?看看CPU是哪些进程占用过高,分析是否有人恶意攻击,分析服务异常报错日志

1.1 磁盘内存够不够?

先用 df -h 查看磁盘内存够不够,也可以看出是哪个目录下占用过高,在使用 du -sh * 来定位此目录下哪个文件占用过大,自己衡量是否可以删除 是否需要备份 是否需要扩内存

使用方法:

[root@iZ2ze7jdvnw88d1kn6i8lzZ frain]# df -h文件系统        容量  已用  可用 已用% 挂载点/dev/vda1        40G   16G   23G   41% /devtmpfs        909M     0  909M    0% /devtmpfs           919M     0  919M    0% /dev/shmtmpfs           919M  636K  919M    1% /runtmpfs           919M     0  919M    0% /sys/fs/cgrouptmpfs           184M     0  184M    0% /run/user/0
[root@iZ2ze7jdvnw88d1kn6i8lzZ frain]# du -sh *2.7G    db96K     envs3.0M    frain

1.2 查看CPU某服务是否异常飙高

这就不过多介绍了直接上代码 使用top命令 就可以轻松查看,看一下CPU的使用率是否异常飘高,如飘高就可以定位到这个服务有问题,就可以进一步进行分析

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                     21372 root      10 -10  163924  43144   5896 S  2.7  2.3 155:05.21 AliYunDun                                                                                   14830 root      10 -10   41932   3272   1776 S  0.3  0.2  31:42.05 AliYunDunUpdate                                                                             16529 root      20   0  807432  64144  11628 S  0.3  3.4   7:22.02 dockerd-current                                                                             21093 root      20   0       0      0      0 S  0.3  0.0   0:00.31 kworker/0:1                                                                                 23460 root      20   0  157596   6308   4608 S  0.3  0.3   0:01.05 sshd                                                                                            1 root      20   0  191120   3088   1568 S  0.0  0.2  55:01.65 systemd                                                                                         2 root      20   0       0      0      0 S  0.0  0.0   0:01.94 kthreadd

1.3  判断是否有人恶意攻击

先介绍一下常见的几个攻击手段,DDoS流量攻击、CC攻击、SQL注入攻击、文件篡改、暴力破解、漏洞扫描、XSS攻击、CSRF、缓冲区溢出攻击、SYN Flood攻击、病毒蠕虫 等等 有很多这几先介绍几个常见的,这里先简单介绍一下,后期会出一个更具体的安全防护

1.3.1 DDoS流量攻击

DDoS攻击作为当前一种最常见的网络攻击方式,其危害在于黑客短时间的控制大量网络节点资源如:IDC服务器、个人PC、手机、智能设备、打印机、摄像头等,对目标发送大量“合法”的请求,从而导致服务器轻则网络拥堵,重则让服务器宕机陷入瘫痪,还会造成数据库数据丢失或遭窃,给企业带来极大的损失。

那么,如何判断服务器是否遭受到了DDoS流量攻击呢?

突然收到大量请求,CPU被大量占用,导致服务器无法正常访问,平时ping没问题都正常 这个时候ping都ping不通 排除网络的问题后,那么如何解决呢 如果服务不好进行规避,最不济的方法就是快速的 换域名换IP,这个时候如果突然降下来了那么就可以确认了,后续加好防火墙、做好安全策略 选择好的服务商 进行规避这些异常流量

1.3.2  CC攻击

CC攻击(ChallengeCoHapsar,挑战黑洞)是DDoS攻击的一种常见类型,攻击者控制某些主机不停地发送大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC攻击主要针对WEB服务器发送大量并发请求,重点针对应用程序中比较消耗资源的功能,占用大量系统资源。CC攻击的攻击技术含量和成本很低, 只要有上百个IP,每个IP弄几个进程,就可以有上千个并发请求,很容易让被攻击目标服务器资源耗尽,从而造成网站宕机。

那么,如何防御呢?

选择可靠的高防服务器,提升服务器硬件和网络带宽资源:高性能服务器硬件能力和充足的网络带宽资源可以提升系统对CC攻击的承载能力、网站页面静态化、判断目标IP然后进行屏蔽限制、部署高防CDN:接入高防CDN,隐藏服务器源IP,自动识别攻击流量,清洗后将正常访客流量回源到源服务器IP上,保障业务安全、关闭不需要的端口和服务、建议不随便开放服务器宽口 可以通过开发端口进行渗透注入病毒,不知为的情况下就可以获取密码进行反弹shell 渗透进你的服务器

安全方面 就不先做过多介绍 后期按照各个方向出具体的细节文章!

二 服务层面

上面已经讲过了可以通过CPU表现来确定哪些服务出了问题,这一板块用来讲解如何排查某服务异常飘高的问题 分几个方面 REDIS PHP MYSQL 来分析

2.1 REDIS异常分析

查看分析REDIS LOG日志,查看频繁获取命令的响应时长,判断是否是因为流量变大从而导致获取频繁处理不过来 导致CPU升高 PHP服务一直处于等待REDIS,REDIS 相应超时 导致获取数据为空,PHP程序就会跳过缓存直查DB,导致MYSQL也异常升高

解决办法

升级增加REDIS内存,升级集群,根据业务板块区分REDIS服务,建议增加服务监控到达阈值主动报警,对应负责人员快速确认解决方案 以避免出现这种问题

2.2 PHP异常分析

查看分析php异常log,来定位是否是代码的问题,这几种服务都是相连的,可以通过php错误日志分析代码位 报错信息 有的就很明显 就能显示出问题 比如redis连接超时,如果只报错了某行的问题,就去看一下对应的代码是否写的逻辑有问题 陷入死循环 导致内存内存溢出,还或者是因为 频繁查询DB 的一张表 因为访问频率比较大 相应时间过长 造成等待状态 造成堵塞

2.3 MYSQL异常分析

通过增加慢日志来分析mysql查询 我们写的sql是否有问题 如有相应异常 就去快速优化 规避问题,写完之后可以查看一下前后的连接数 处理速度 分析执行计划 某一个结构体的相应时长 扫描结构是否用到了索引 是否全表查询 过滤 排序等等,如果是因为某张表 过大访问频繁导致的问题 可以增加合理的索引 用来提高相应效率

重点如下

先去分析服务的错误日志,有一些问题可以很快速的定位到问题,收到攻击这种问题一般很少遇见 一般上线出问题 都是程序写的有问题,或者各服务异常 内存不够 处理不过来 导致异常升高,建议增加异常监控报警,可以很轻松规避 内存不够用 CPU升高等问题

总结

线上出现问题有很多原因导致有可能本文没有涉猎那么全面,欢迎各位积极留言,我会更新上去,谢谢!

线上故障如何快速排查_第1张图片

 扫码关注公众号,每天推送不同的技术文章,公众号私聊获取学习资料,期待你我之间一起进步! 

你可能感兴趣的:(问题分析,服务器,linux,php)