一次大量TIME_WAIT和Recv-Q 堵塞问题排查思路
记录一下周末出现问题~ 仅自己摘记不做任何参考。
第一天故障:
现象:
公司销售群和售后群炸了,说老后台(1.0版本)崩溃了,因为还有部门的业务没来得及迁移到新后台,我当时正在打农药哈哈~
后台504打不开,偶尔能刷出来也是很慢。。大概过了10分钟新后台也挂了,也就是公司所有业务全瘫痪了。。。问题严重了。。。
排查及原因:
先登陆到我们比较重视的新后台查看,有慢日志看慢日志没有慢日志先加慢日志。
简单查看了一下top 发现load较高,有时候能到20左右,忽高忽低不是很稳定,其他都还算正常。。
接着netstat大法查看下连接数情况,统计了一下大概8000多time_wait,平常肯定没这么多的量。

次数省略几千行...
strace -p http的pid strace -p php的pid #通过strace工具追踪了一下web服务和php的进程id,查看他正在做什么?
通过跟踪发现有很多调用一个数据库的函数在堆积,找到相应文件下发现原来这里有一个数据库已经下线了,在切换数据库的时候没有更改这个地方,白天切换的时候没发现问题,到了晚上高峰期大量的调用在排队,(今天早上来了问了一下研发,这个调用超时时间是5秒) 导致了大量的TIME_WAIT等待。。堵死。。
处理:
将数据库更改为正常的IP解决了~
第二天老后台问题:
晚上9点左右同样的情况。直接查看连接数情况,果然又堵车了。

又堵塞了,大量的连接数不释放,目前业务已经崩了大量的投诉,先快速释放连接数恢复业务。
[root@vm-10 ]# cat /etc/sysctl.conf
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_tw_reuse = 1 #新增
net.ipv4.tcp_tw_recycle = 1 #新增
net.ipv4.tcp_fin_timeout = 30 #新增
[root@vm-10 ]#
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
果然调整完后连接数快速降下来了,然后strace查了一下系统调用,发现还有一个数据库没更改
lstat("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO/index.php", {st_mode=S_IFREG|0644, st_size=14994, ...}) = 0
stat("/aaa/www/html/hangye.aaa.com/s", 0x7ffd5f5e22b0) = -1 ENOENT (No such file or directory)
lstat("/aaa", {st_mode=S_IFDIR|0755, st_size=103, ...}) = 0
lstat("/aaa/www", {st_mode=S_IFDIR|0755, st_size=38, ...}) = 0
lstat("/aaa/www/html", {st_mode=S_IFDIR|0755, st_size=107, ...}) = 0
lstat("/aaa/www/html/hangye.aaa.com", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/aaa/www/html/hangye.aaa.com/s", 0x7ffd5f5e22b0) = -1 ENOENT (No such file or directory)
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={60, 0}}, NULL) = 0
rt_sigaction(SIGPROF, {0x7f5710190cc0, [PROF], SA_RESTORER|SA_RESTART, 0x7f5719175660}, {0x7f5710190cc0, [PROF], SA_RESTORER|SA_RESTART, 0x7f5719175660}, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0
getcwd("/", 4095) = 2
chdir("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO") = 0
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0
gettimeofday({1502634914, 509085}, NULL) = 0
open("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO/index.php", O_RDONLY) = 31
更改/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO/index.php 文件中的数据库,问题解决。
一次大量TIME_WAIT和Recv-Q 堵塞问题排查思路的更多相关文章
- Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法
近期遇到一个项目 需要在Linux上建立一个Socket 进行 HTTP_GET , 需要线程高并发的 使用TCP Socket 进行Send 发送HTTP_GET请求到 指定网站 . 而且不需要re ...
- python_21_线程+进程+协程
python_线程_进程_协程 什么是线程? -- os能够进行运算调度的最小单位,被包含在进程之中,是一串指令的集合 -- 每个线程都是独立的,可以访问同一进程下所有的资源 什么是进程? -- 每个 ...
- [转]理解I/O Completion Port
原文:http://dev.gameres.com/Program/Control/IOCP.htm 另附上:http://stackoverflow.com/questions/5283032/i- ...
- python3.0_day9_scoket基础之篇
一.socket简单介绍 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求 ...
- 理解I/O Completion Port
欢迎阅读此篇IOCP教程.我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼.OK,但我不能保证你明白IOCP的一切,但我会尽我 ...
- tcp-backlog配置
redis tcp-backlog配置 在redis2.8版本中有一个tcp-backlog配置, 说明如下: # TCP listen() backlog.## In high requests ...
- 安装shellinabox-master
安装shellinabox-master 1 插件介绍:通过web页面管理linux主机(电脑版) a. 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- 网络-tcp
1.TCP:面向连接可靠的传输协议,全拼:Transmission Control Protocol 2.UDP:用户数据报协议 全拼:User Datagram protocol 不是面向连接的 ...
- TCP三次握手原理,你真的了解吗?
最近碰到一个问题,Client 端连接服务器总是抛异常.在反复定位分析.并查阅各种资料搞懂后,我发现并没有文章能把这两个队列以及怎么观察他们的指标说清楚. 问题描述 场景:Java 的 Client ...
随机推荐
- vue项目出现空格警告的原因及其解决办法
原因: 因为你的Webpack 配置中大概是使用了 eslint-loader,这是用来规范代码风格的,在多人协作或大项目中推荐使用,不想要则可以在 webpack.config.js 中去掉.esl ...
- Docker镜像浅谈
先抛出几个我在学习过程中产生的几个问题. 1. 容器镜像是什么, 和装系统时的镜像有什么关系? 2. 容器镜像的作用是什么? 3. 不同版本的ubuntu镜像有什么区别, 比如说 ubuntu:18. ...
- react路由配置(未完)
React路由 React推了两个版本 一个是react-router 一个是react-router-dom 个人建议使用第二个 因为他多了一个Link组件 Npm install react-ro ...
- linux 操作之压缩与解压
压缩与解压 压缩格式:zip , rar , 7z , iso , exe gzip (以下是命令操作) gzip [文件名] #压缩成gz格式 , 原来的文件消失 , 不支持目录. bzip2 - ...
- JZ2440开发板:修改ARM芯片时钟(学习笔记)
想要修改ARM芯片的时钟,需要去查询芯片手册和原理图,获取相关的信息(见下方图片) 首先来看时钟的结构图 根据结构图可以看出,时钟源有两种选择:1. XTIpll和XTOpll所连接的晶振 2. EX ...
- 初识主席树_Prefix XOR
主席树刚接触觉得超强,根本看不懂,看了几位dalao的代码后终于理解了主席树. 先看一道例题:传送门 题目大意: 假设我们预处理出了每个数满足条件的最右边界. 先考虑暴力做法,直接对x~y区间暴枚,求 ...
- 成都优步uber司机第一组与第二组的区别
成都优步uber司机被分成了两组,两组的奖励方式不相同,下面我们先来看看官方给出的奖励方式: 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最 ...
- 北京Uber优步司机奖励政策(9月14日~9月20日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Android Stadio配置了gralde的本地路径,但是windos 命令行还是会下载gradle
如下图: 已经在stadio 里面设置了gradle 的路径,但是在cmd 命令行里面不会去用这个路径. 解决方案:需要在环境变量里面设置一个gradle home GRADLE_USER_HOME ...
- LWM2M的DISCOVER操作
1. 先看下DISCOVER的数据流,工作服务器下发的指令到设备客户端 2. 解释,这个操作是用来发现Object, Object Instances, and Resources的属性,同时可以发现 ...