昨天下午17:45左右,松勤系统管理员接到学员反馈,松勤网打不开,访问失败。管理员接到通知后火速赶现场(松勤网),情况如学员反馈一样,网站打不开,并且报:“系统内部代码错误”。

松勤网是软件测试在线学习的平台,每天有成百上千的访问量,众多软件测试爱好者都在上面学习视频、电子书。这下无法访问了,情况十分紧急,系统管理员火速展开了工作,如下:

1、松勤网部署在阿里云服务器上,管理员登录阿里云后台,直接切换到系统资源监控板块,但凡系统出现宕机,首先需要排查的就是系统硬件的问题,资源监控面板显示信息,如下图所示:

2、从上图可以看出,系统网络访问量在17:40-17:45,持续了5分钟左右的高峰,对应的系统CPU使用率在17:45分开始,持续了30分钟左右的峰值(100%使用率)。两组数据对比可以判断,CPU的忙碌和网络流量有直接的关联。

3、这个时候管理员脑海里面出现了2个疑问,第一,17:40开始,是什么业务导致了高网络流量;第二,CPU 使用率持续了30分钟的100%,是哪些程序使用了如此多的CPU资源。

4、以上两个问题,都需要登录到松勤网所在的Linux主机上去盘查。于是,管理员通过远程登录工具Putty,通过松勤网ip地址,linux系统的用户名和密码,远程登录到Linux系统(幸好,系统还可以勉强登录进去,但是速度很慢了)。登录linux系统后,管理员采用top命令,查看系统程序运行详细情况,如下图所示:

5、从上图可以看出,用户程序占用cpu达到84.1%(us),操作系统程序占用到15.4%(sy),系统空闲率为0(0.0 id),监控显示大量的 php-fpm进程,该进程属于www这个用户,www用户主管的恰恰就是网站的web服务器apache。

6、可以初步判定,是网络流量上来,触发了系统启动大量的php-fpm进程,进而引起系统cpu繁忙,那么问题是这些网络流量来自于哪里,是正常的访问还是恶意的攻击呢,难道系统没有防护吗,另外,到底是哪个业务流程触发了问题呢?

7、要解答上述问题,就需要系统日志的配合了,系统崩溃是由网络流量触发的,那么势必对系统产生访问量,用户访问的信息,记录在日志文件中,于是管理员运行以下命令:

cat www.songqinnet.com-access_log | awk ‘{print $1}’| sort | uniq -c | sort -rn | head -10

得到结果如下:

54584 157.x1.159.61
46811 120.2x9.34.119
26813 112.x7.99.39
17221 180.1x0.163.80
17064 117.1x0.150.7
15568 122.2x8.189.67

同时查到日志如下:
kernel: Out of memory: Kill process 29917 (php-fpm) score 30 or sacrifice child(内存满)

看内存消耗最多的前10个进程的命令:

ps auxw|head -1;ps auxw|sort -rn -k4|head -10

通过命令以下分析出大量的访问来自于120.2x9.34.119(x是出于隐私保护):

cat www.songqinnet.com-access_log | grep “27/Dec/2018:17” | awk ‘{print $1}’| sort | uniq -c | sort -rn | head -10
40214 120.2x9.34.119

8、通过以上排查,管理员初步确认,网络大流量是来自于以上这个ip,于是按照经验“没有无缘无故的爱,也没有无缘无故的恨”,这个ip很可能是熟悉的人,于是通过系统匹配,定位出这个ip属于哪个用户,并且提取到该用户的手机号码,于是联系到这位来自于深圳的朋友并和她确认了,刚才的大流量确实来自于她那边的Jmeter。(小编要感谢这位朋友,因为你的大流量-5000TPS,把系统深层面的问题暴露出来了,不得不说你的电脑配置还是杠杠滴)。

9、到这里为止,触发本次系统崩溃的外部来源终于水落石出了。

10、可是是什么原因导致的呢 ?通过进一步排查发现系统存在的问题:

A.在最近一次系统升级中,开发哥哥升级防火墙规则后,竟然没有启动防火墙,直接导致操作系统层面没有任何网络流量防护。同时也发现之前的防火墙规则也非常简单,形同虚设。

于是管理员里面甩上一条命令,先解决燃眉之急:

iptables -I INPUT 5 -p tcp --syn --dport 443 -m connlimit --connlimit-above 10 -j REJECT(同一个ip地址,在443端口,链接超过10的链接拒绝)

B.开发哥哥完成了SQL代码调试后,端口3306竟然还可以通过外网访问到,这个是极其危险的,管理员里面关闭了这个访问。

C.在用户大流量访问的时候,系统进程php-fpm 出现多次致命的退出,导致了后台监管程序多次启动该进程,消耗了系统大量的内存。

综上:本次故障基本原因已经找到,并且临时性地解决了问题,后续还有很多地方需要优化,从操作系统层面到代码层面都存在问题。

看完以后,各位看官,你们认为本次故障,该由谁来负责,测试or开发? 欢迎留言交流。

【松勤软件测试】昨天,松勤网被攻击,发现了一群bug,这个锅该谁来背-测试or开发 ?相关推荐

  1. linux把文件移到当前目录下,松勤软件测试-如何用Linux将一个文件移动到另一个目录下...

    原标题:松勤软件测试-如何用Linux将一个文件移动到另一个目录下 用mv命令进行操作 1.作用 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的ren和mov ...

  2. 松勤软件测试0基础到项目实战系统学习全栈班完整分享

    学习编程的一个很好的方法就是和其他的程序员交谈.不必谈论任何特定的内容.可以是你正在学习的东西,也可以是你认为很酷的东西,更可以是你正在工作的东西,皆可.你会发现很多程序员并不喜欢只是聊编程.这样做可 ...

  3. 松勤软件测试试题,如果让你测试一个完全不熟悉的系统,你会怎么办?

    (松勤软件测试讯)在软件测试面试过程中,可能会遇到「如果让你测试一个完全不熟悉的系统,你会怎么办?」的面试问题,面试官与应聘者对话如下: 面试官诡异的微笑:"如果让你测试一个你完全不熟悉的系 ...

  4. 螺栓不松没事,一松就断?是什么原因?

    螺栓松动是常有的事,它可能引起设备振动.部件损坏,甚至人员伤亡等问题.如何拧紧一个小小的螺母,一直是机械设计中长盛不衰的话题,大家比较了解的,例如日本的偏心螺母.唐氏螺母和中国自紧王螺母,但我们今天不 ...

  5. 家勤则兴,人勤则健。 曾国藩警句,太经典了!

    曾国藩名言警句 "大柔非柔,至刚无刚". "家勤则兴,人勤则健". :"侍亲以得欢为本". 家庭三致详:"孝致祥,勤致详,恕致详& ...

  6. 软件测试面试题银行,资讯详情-金融测试面试题-柠檬班-自动化测试-软件测试培训-自学官网...

    网上银行转账是怎么测的,设计一下测试用例. 回答思路:宏观上可以从质量模型(万能公式)来考虑,重点需要测试转账的功能.性能与安全性.设计测试用例可以使用场景法为主,先列出转账的基本流和备选流.然后设计 ...

  7. 【软件测试】男生vs女生,谁更加适合?没有你发现不了的bug......

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  8. 内网穿透远程访问家里的群晖NAS 1-2

    系列文章 内网穿透远程访问家里的群晖NAS 1-2 内网穿透远程访问家里的群晖NAS 2-2 随着科学技术的发展,各类型的电子设备已经全面覆盖了我们的生活和工作,为了让这些电子设备能够连接为一个整体, ...

  9. 【内网安全】——内网主机发现

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷 座右铭:不要让时代的悲哀 ...

最新文章

  1. LabVIEW系列—将串口二进制数据转换成ASCII字符
  2. nodejs express 路由与view创建多级目录
  3. elk之elasticsearch(二)
  4. OracleDB的数据库名,实例名,服务名,数据库域名,全局数据库名的简单介绍
  5. java中Cookie中文字符乱码问题
  6. linux 内存坏了,Linux的缓存内存 Cache Memory详解
  7. DirectX12(D3D12)基础教程(一)——基础教程
  8. 有关目标的SMART法则
  9. 数学在计算机领域的应用,浅析数学在计算机领域中的重要性
  10. 基于RT-Thread的环境监测装置(含IO口模拟8080时序驱动TFT屏幕)
  11. 深圳摇号验证码一输完就变的解决办法
  12. deepin配置ssh访问
  13. python批量读取txt数据并写入csv
  14. Z05 - 046、工作流调度实现方式
  15. 视觉设计本地化的重要性
  16. linux tty字体,ArchLinux TTY 中文字体渲染
  17. 从零开始Android游戏编程(第二版) 第一章 搭建开发环境
  18. Swift - 用装有控制器name的数组for循环批量创建控制器(string转UIViewController)
  19. (五)FTD基于应用的控制
  20. 第八章 云计算原理与技术

热门文章

  1. Python绘制地图神器,上手直接开大!
  2. Qt中的d指针和q指针
  3. java 接口方法名重复_Java接口/实现命名约定[重复]
  4. Android Fota(差分包)制作
  5. 题解2020届天梯赛总决赛L2-4哲哲打游戏
  6. 构建LVS负载均衡群集——地址转换模式(LVS-NAT)
  7. while语句和for嵌套c语言,关于循环的嵌套,说法错误的是() 答案:三种循环(while循环、do-while循环和for循 环)不可以互相嵌套。...
  8. 彻底搞懂equals以及hashCode方法(源码级分析)
  9. 数字三角形(动态规划经典例题)
  10. 切面的优先级、重(chong)用切点表达式