十几万连接几M的流量,吓死“宝宝”了
某局点升级(nginx变ats,同时去掉前端的nginx负载层),升级之后服务就不正常,硬生生的看着十几万连接,没有流量,各种排错,可谓是把心提到嗓子眼惊心动魄的半小时,虽然做了很好的业务机制,服务不正常用户可以直接回源,不过对于我们的流量而言肯定是个锯齿了,回顾一下排查过程。
升级过程不说了,升完后对业务配置、健康心跳、磁盘设置、本地回源DNS简单做了检查,没发现问题。接下来就是切流量过来,前端的DNS按照域名哈希将请求分发过来,流量迅速到了100M还在上升,连接数到了几万(域名质量不好,很多动态的,所以也算正常),但过了几分钟流量骤降,一直降到了几M,观察连接数没降反升,内存几乎吃满。
(当前连接数)
(进出流量及cpu、内存、tcp重传1秒刷新动态监控图,内存越跑越满,tcp重传越来越高)
神经马上紧张起来了,先检查DNS是否正常,因为本地回源DNS如果坏掉,会出现这种攒了大量连接无法服务的情况,然而测试发现本地回源DNS服务正常,看来不是简单问题,crt打开多个窗口,开始监测:
tailf /var/log/messages |grep kernel 没有报错,系统层面应该没什么问题。
tailf /opt/ats/var/log/trafficserver/diags.log 没有明显报错,只是过一段时间会提示连接太多,丢弃连接,说明业务肯定是不正常了,不过定位不了是哪里的错误。
tstop打开后查看整体的情况,发现正常刷新,但是每次刷新有些数据不能正常显示,内存缓存和硬盘缓存的容量都没有显示,为什么没有显示呢,是设置错误了么,然后再去检查磁盘设置,发现records.config内存缓存设置为内存的一半12G,storge.config设置也没问题,继续检查。
tsar –l 1 监测,磁盘IO都为0,所有的盘都不写盘,于是想到底是因为没有流量导致不写盘的,还是写不了盘导致没有流量的呢,先假设不写盘才没流量的吧,不写盘有两种情况一是盘坏了二是磁盘的权限不对,马上检查,发现所有的数据盘拥有者所有组均为tserver,而且检查了全为裸盘,貌似没有问题。
(权限查看后发现没问题)
tsar –n 1 继续检查下历史数据,发现ats启动的瞬间是有流量的,紧接着流量骤降,而且磁盘刚开始是有IO的,越来越怀疑是硬盘问题但没有证据。后来想,做个测试,干脆不用硬盘,直接上内存,竟然有流量了,而且相对稳定,终于定位出问题了。
(将盘全部注释掉)
继续想,难道所有的硬盘都坏了么,加入一个硬盘试试吧,依旧不行,继续想下去,为什么tstop计算不出缓存呢,于是列出所有磁盘的大小,发现这个局点的每块磁盘居然有将近2T左右,图如下:
(只有一个盘是186.5G,其余的盘都在2T)
继续想可能是磁盘太大了,ats无法加入进来吧,于是更改使用磁盘的大小(300G),重启ats,问题解决,松了一口气,惊心动魄半小时。
(磁盘大小配置更改,直接指定大小)
(更改重启后,业务恢复正常)
自建个人原创站运维网咖社(www.net-add.com),新的博文会在网咖社更新,欢迎浏览。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java面向对象理论篇
面向对象:(学习王伟、传智等教程) 1.1)面向对象 面向对象是基于面向过程的编程思想 1.2)面向对象的思想特点 1.2.1)是一种更符合我们思考习惯的思想 1.2.2)把复杂的事情简单化 1.2.3)让我们从执行者变成了指挥者 2)类与对象 2.1)类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。 2.2)Java语言中最基本的单位是类。所以,我们要用类来体现事物。 类: 成员变量 事物属性 属性:用来描述对象的数据元素称为对象的熟悉 成员方法 事物行为 方法:对对象的属性行为的操作成为对象的方法 类:是一组相关的属性和行为的集合。是一个抽象的概念。 对象:是该类事物的具体存在,是一个具体的实例。(对象) 举例:学生:类 班长:对象 3、Java类的声明 语法格式: [< modifiers>] class < class_name> { [<attribute_declarations>] [<meth...
- 下一篇
第十一章 Shell常用命令与工具(二)
本章涉及命令如下: 11.31 wget 功能:非交互式网络下载,类似于HTTP客户端 常用选项: -b, --background 后台运行 日志记录和输入文件: -o, --output-file=FILE 日志写到文件 -a,--append-output=FILE 日志追加到文件 -d, --debug 打印debug信息,会包含头信息 -q, --quiet 退出,不输出 -i, --input-file=FILE 从文件中读取URL下载 下载选项: -t, --tries=NUMBER 设置链接重试次数 -O,--output-document=FILE 写入内容到文件 -nc, --no-clobber 跳过下载现有的文件 -c, --continue 断点续传 --progress=TYPE 设置进度条(dot和bar) -S, --server-response 打印服务器响应头信息 --spider 不下载任何内容 -T,--timeout=SECONDS 设置相应超时时间(还有--d...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能